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