1 module libwasm.bindings.Client;
2 
3 import libwasm.types;
4 
5 import memutils.ct: tuple;
6 import libwasm.bindings.Clients;
7 import libwasm.bindings.Document;
8 import libwasm.bindings.MessagePort;
9 
10 @safe:
11 nothrow:
12 
13 struct Client {
14   nothrow:
15   JsHandle handle;
16   alias handle this;
17   this(Handle h) {
18     this.handle = JsHandle(h);
19   }
20   string url()() {
21     return Object_Getter__string(this.handle, "url");
22   }
23   FrameType frameType()() {
24     return Object_Getter__int(this.handle, "frameType");
25   }
26   ClientType type()() {
27     return Object_Getter__int(this.handle, "type");
28   }
29   string id()() {
30     return Object_Getter__string(this.handle, "id");
31   }
32   void postMessage(T0)(scope auto ref T0 message, scope ref Sequence!(JsObject) transfer) {
33     // Any
34     Handle _handle_message = getOrCreateHandle(message);
35     Serialize_Object_VarArgCall!void(this.handle, "postMessage", "Handle;Handle", tuple(_handle_message, cast(Handle)transfer.handle));
36     dropHandle!(T0)(_handle_message);
37   }
38   void postMessage(T0)(scope auto ref T0 message, scope ref PostMessageOptions aOptions) {
39     // Any
40     Handle _handle_message = getOrCreateHandle(message);
41     Serialize_Object_VarArgCall!void(this.handle, "postMessage", "Handle;Handle", tuple(_handle_message, cast(Handle)aOptions.handle));
42     dropHandle!(T0)(_handle_message);
43   }
44   void postMessage(T0)(scope auto ref T0 message) {
45     import std.traits : isNumeric, isFloatingPoint, isSomeString;
46     if (isSomeString!T0) {
47       Object_Call_string__void(this.handle, "postMessage", cast(string) message);
48       return;
49     } else if (isNumeric!T0 && !isFloatingPoint!T0) {
50       Object_Call_long__void(this.handle, "postMessage", cast(long) message);
51       return;
52     } else if (isFloatingPoint!T0) {
53       Object_Call_double__void(this.handle, "postMessage", cast(double) message);
54       return;
55     }
56     // Any
57     Handle _handle_message = getOrCreateHandle(message);
58     Object_Call_Handle__void(this.handle, "postMessage", _handle_message);
59     dropHandle!(T0)(_handle_message);
60   }
61 }
62 enum FrameType {
63   auxiliary,
64   top_level,
65   nested,
66   none
67 }
68 struct WindowClient {
69   nothrow:
70   libwasm.bindings.Client.Client _parent;
71   alias _parent this;
72   this(Handle h) {
73     _parent = .Client(h);
74   }
75   VisibilityState visibilityState()() {
76     return Object_Getter__int(this._parent, "visibilityState");
77   }
78   bool focused()() {
79     return Object_Getter__bool(this._parent, "focused");
80   }
81   auto focus()() {
82     return JsPromise!(WindowClient)(Object_Getter__Handle(this._parent, "focus"));
83   }
84   auto navigate()(string url) {
85     return JsPromise!(WindowClient)(Object_Call_string__Handle(this._parent, "navigate", url));
86   }
87 }
88 
89