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  }