github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/filebrowserhandler/apis_js_wasm.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright 2023 The Prime Citizens 3 4 package filebrowserhandler 5 6 import ( 7 "github.com/primecitizens/pcz/std/core/abi" 8 "github.com/primecitizens/pcz/std/core/mark" 9 "github.com/primecitizens/pcz/std/ffi/js" 10 "github.com/primecitizens/pcz/std/plat/js/webext/filebrowserhandler/bindings" 11 ) 12 13 type FileHandlerExecuteEventDetails struct { 14 // Entries is "FileHandlerExecuteEventDetails.entries" 15 // 16 // Required 17 Entries js.Array[js.Any] 18 // TabId is "FileHandlerExecuteEventDetails.tab_id" 19 // 20 // Optional 21 // 22 // NOTE: FFI_USE_TabId MUST be set to true to make this field effective. 23 TabId int64 24 25 FFI_USE_TabId bool // for TabId. 26 27 FFI_USE bool 28 } 29 30 // FromRef calls UpdateFrom and returns a FileHandlerExecuteEventDetails with all fields set. 31 func (p FileHandlerExecuteEventDetails) FromRef(ref js.Ref) FileHandlerExecuteEventDetails { 32 p.UpdateFrom(ref) 33 return p 34 } 35 36 // New creates a new FileHandlerExecuteEventDetails in the application heap. 37 func (p FileHandlerExecuteEventDetails) New() js.Ref { 38 return bindings.FileHandlerExecuteEventDetailsJSLoad( 39 js.Pointer(&p), js.True, 0, 40 ) 41 } 42 43 // UpdateFrom copies value of all fields of the heap object to p. 44 func (p *FileHandlerExecuteEventDetails) UpdateFrom(ref js.Ref) { 45 bindings.FileHandlerExecuteEventDetailsJSStore( 46 js.Pointer(p), ref, 47 ) 48 } 49 50 // Update writes all fields of the p to the heap object referenced by ref. 51 func (p *FileHandlerExecuteEventDetails) Update(ref js.Ref) { 52 bindings.FileHandlerExecuteEventDetailsJSLoad( 53 js.Pointer(p), js.False, ref, 54 ) 55 } 56 57 // FreeMembers frees fields with heap reference, if recursive is true 58 // free all heap references reachable from p. 59 func (p *FileHandlerExecuteEventDetails) FreeMembers(recursive bool) { 60 js.Free( 61 p.Entries.Ref(), 62 ) 63 p.Entries = p.Entries.FromRef(js.Undefined) 64 } 65 66 type OnExecuteEventCallbackFunc func(this js.Ref, id js.String, details *FileHandlerExecuteEventDetails) js.Ref 67 68 func (fn OnExecuteEventCallbackFunc) Register() js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)] { 69 return js.RegisterCallback[func(id js.String, details *FileHandlerExecuteEventDetails)]( 70 fn, abi.FuncPCABIInternal(fn), 71 ) 72 } 73 74 func (fn OnExecuteEventCallbackFunc) DispatchCallback( 75 targetPC uintptr, ctx *js.CallbackContext, 76 ) { 77 args := ctx.Args() 78 if len(args) != 2+1 /* js this */ || 79 targetPC != uintptr(abi.FuncPCABIInternal(fn)) { 80 js.ThrowInvalidCallbackInvocation() 81 } 82 var arg1 FileHandlerExecuteEventDetails 83 arg1.UpdateFrom(args[1+1]) 84 defer arg1.FreeMembers(true) 85 86 if ctx.Return(fn( 87 args[0], 88 89 js.String{}.FromRef(args[0+1]), 90 mark.NoEscape(&arg1), 91 )) { 92 return 93 } 94 95 js.ThrowCallbackValueNotReturned() 96 } 97 98 type OnExecuteEventCallback[T any] struct { 99 Fn func(arg T, this js.Ref, id js.String, details *FileHandlerExecuteEventDetails) js.Ref 100 Arg T 101 } 102 103 func (cb *OnExecuteEventCallback[T]) Register() js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)] { 104 return js.RegisterCallback[func(id js.String, details *FileHandlerExecuteEventDetails)]( 105 cb, abi.FuncPCABIInternal(cb.Fn), 106 ) 107 } 108 109 func (cb *OnExecuteEventCallback[T]) DispatchCallback( 110 targetPC uintptr, ctx *js.CallbackContext, 111 ) { 112 args := ctx.Args() 113 if len(args) != 2+1 /* js this */ || 114 targetPC != uintptr(abi.FuncPCABIInternal(cb.Fn)) { 115 js.ThrowInvalidCallbackInvocation() 116 } 117 var arg1 FileHandlerExecuteEventDetails 118 arg1.UpdateFrom(args[1+1]) 119 defer arg1.FreeMembers(true) 120 121 if ctx.Return(cb.Fn( 122 cb.Arg, 123 args[0], 124 125 js.String{}.FromRef(args[0+1]), 126 mark.NoEscape(&arg1), 127 )) { 128 return 129 } 130 131 js.ThrowCallbackValueNotReturned() 132 } 133 134 // HasFuncOnExecute returns true if the function "WEBEXT.fileBrowserHandler.onExecute.addListener" exists. 135 func HasFuncOnExecute() bool { 136 return js.True == bindings.HasFuncOnExecute() 137 } 138 139 // FuncOnExecute returns the function "WEBEXT.fileBrowserHandler.onExecute.addListener". 140 func FuncOnExecute() (fn js.Func[func(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)])]) { 141 bindings.FuncOnExecute( 142 js.Pointer(&fn), 143 ) 144 return 145 } 146 147 // OnExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.addListener" directly. 148 func OnExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret js.Void) { 149 bindings.CallOnExecute( 150 js.Pointer(&ret), 151 callback.Ref(), 152 ) 153 154 return 155 } 156 157 // TryOnExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.addListener" 158 // in a try/catch block and returns (_, err, ok = false) when it went through 159 // the catch clause. 160 func TryOnExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret js.Void, exception js.Any, ok bool) { 161 ok = js.True == bindings.TryOnExecute( 162 js.Pointer(&ret), js.Pointer(&exception), 163 callback.Ref(), 164 ) 165 166 return 167 } 168 169 // HasFuncOffExecute returns true if the function "WEBEXT.fileBrowserHandler.onExecute.removeListener" exists. 170 func HasFuncOffExecute() bool { 171 return js.True == bindings.HasFuncOffExecute() 172 } 173 174 // FuncOffExecute returns the function "WEBEXT.fileBrowserHandler.onExecute.removeListener". 175 func FuncOffExecute() (fn js.Func[func(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)])]) { 176 bindings.FuncOffExecute( 177 js.Pointer(&fn), 178 ) 179 return 180 } 181 182 // OffExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.removeListener" directly. 183 func OffExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret js.Void) { 184 bindings.CallOffExecute( 185 js.Pointer(&ret), 186 callback.Ref(), 187 ) 188 189 return 190 } 191 192 // TryOffExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.removeListener" 193 // in a try/catch block and returns (_, err, ok = false) when it went through 194 // the catch clause. 195 func TryOffExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret js.Void, exception js.Any, ok bool) { 196 ok = js.True == bindings.TryOffExecute( 197 js.Pointer(&ret), js.Pointer(&exception), 198 callback.Ref(), 199 ) 200 201 return 202 } 203 204 // HasFuncHasOnExecute returns true if the function "WEBEXT.fileBrowserHandler.onExecute.hasListener" exists. 205 func HasFuncHasOnExecute() bool { 206 return js.True == bindings.HasFuncHasOnExecute() 207 } 208 209 // FuncHasOnExecute returns the function "WEBEXT.fileBrowserHandler.onExecute.hasListener". 210 func FuncHasOnExecute() (fn js.Func[func(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) bool]) { 211 bindings.FuncHasOnExecute( 212 js.Pointer(&fn), 213 ) 214 return 215 } 216 217 // HasOnExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.hasListener" directly. 218 func HasOnExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret bool) { 219 bindings.CallHasOnExecute( 220 js.Pointer(&ret), 221 callback.Ref(), 222 ) 223 224 return 225 } 226 227 // TryHasOnExecute calls the function "WEBEXT.fileBrowserHandler.onExecute.hasListener" 228 // in a try/catch block and returns (_, err, ok = false) when it went through 229 // the catch clause. 230 func TryHasOnExecute(callback js.Func[func(id js.String, details *FileHandlerExecuteEventDetails)]) (ret bool, exception js.Any, ok bool) { 231 ok = js.True == bindings.TryHasOnExecute( 232 js.Pointer(&ret), js.Pointer(&exception), 233 callback.Ref(), 234 ) 235 236 return 237 }