1 module libwasm.bindings.MessagePort;
2 
3 import libwasm.types;
4 
5 import memutils.ct: tuple;
6 import libwasm.bindings.EventHandler;
7 import libwasm.bindings.EventTarget;
8 
9 @safe:
10 nothrow:
11 
12 struct MessagePort {
13   nothrow:
14   libwasm.bindings.EventTarget.EventTarget _parent;
15   alias _parent this;
16   this(Handle h) {
17     _parent = .EventTarget(h);
18   }
19   void postMessage(T0)(scope auto ref T0 message, scope ref Sequence!(JsObject) transferable) {
20     // Any
21     Handle _handle_message = getOrCreateHandle(message);
22     Serialize_Object_VarArgCall!void(this._parent, "postMessage", "Handle;Handle", tuple(_handle_message, cast(Handle)transferable.handle));
23     dropHandle!(T0)(_handle_message);
24   }
25   void postMessage(T0)(scope auto ref T0 message, scope ref PostMessageOptions options) {
26     // Any
27     Handle _handle_message = getOrCreateHandle(message);
28     Serialize_Object_VarArgCall!void(this._parent, "postMessage", "Handle;Handle", tuple(_handle_message, cast(Handle)options.handle));
29     dropHandle!(T0)(_handle_message);
30   }
31   void postMessage(T0)(scope auto ref T0 message) {
32     import std.traits : isNumeric, isFloatingPoint, isSomeString;
33     if (isSomeString!T0) {
34       Object_Call_string__void(this._parent, "postMessage", cast(string) message);
35       return;
36     } else if (isNumeric!T0 && !isFloatingPoint!T0) {
37       Object_Call_long__void(this._parent, "postMessage", cast(long) message);
38       return;
39     } else if (isFloatingPoint!T0) {
40       Object_Call_double__void(this._parent, "postMessage", cast(double) message);
41       return;
42     }
43     // Any
44     Handle _handle_message = getOrCreateHandle(message);
45     Object_Call_Handle__void(this._parent, "postMessage", _handle_message);
46     dropHandle!(T0)(_handle_message);
47   }
48   void start()() {
49     Object_Call__void(this._parent, "start");
50   }
51   void close()() {
52     Object_Call__void(this._parent, "close");
53   }
54   void onmessage(T0)(scope auto ref Optional!(T0) onmessage) if (isTOrPointer!(T0, EventHandlerNonNull)) {
55     Object_Call_EventHandler__void(this._parent, "onmessage", !onmessage.empty, onmessage.front);
56   }
57   EventHandler onmessage()() {
58     return Object_Getter__EventHandler(this._parent, "onmessage");
59   }
60   void onmessageerror(T0)(scope auto ref Optional!(T0) onmessageerror) if (isTOrPointer!(T0, EventHandlerNonNull)) {
61     Object_Call_EventHandler__void(this._parent, "onmessageerror", !onmessageerror.empty, onmessageerror.front);
62   }
63   EventHandler onmessageerror()() {
64     return Object_Getter__EventHandler(this._parent, "onmessageerror");
65   }
66 }
67 struct PostMessageOptions {
68   nothrow:
69   JsHandle handle;
70   alias handle this;
71   this(Handle h) {
72     this.handle = JsHandle(h);
73   }
74   static auto create() {
75     return PostMessageOptions(libwasm_add__object());
76   }
77   void transfer()(scope ref Sequence!(JsObject) transfer) {
78     Object_Call_Handle__void(this.handle, "transfer", transfer.handle);
79   }
80   auto transfer()() {
81     return Sequence!(JsObject)(Object_Getter__Handle(this.handle, "transfer"));
82   }
83 }
84 
85