github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/documentscan/bindings/ffi_bindings.ts (about) 1 import { importModule, Application, heap, Pointer } from "@ffi"; 2 3 importModule("plat/js/webext/documentscan", (A: Application) => { 4 const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser; 5 6 return { 7 "store_ScanResults": (ptr: Pointer, ref: heap.Ref<any>) => { 8 const x = A.H.get<any>(ref); 9 10 if (typeof x === "undefined") { 11 A.store.Bool(ptr + 8, false); 12 A.store.Ref(ptr + 0, undefined); 13 A.store.Ref(ptr + 4, undefined); 14 } else { 15 A.store.Bool(ptr + 8, true); 16 A.store.Ref(ptr + 0, x["dataUrls"]); 17 A.store.Ref(ptr + 4, x["mimeType"]); 18 } 19 }, 20 "load_ScanResults": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => { 21 const x = create === A.H.TRUE ? {} : A.H.get<any>(ref); 22 23 x["dataUrls"] = A.load.Ref(ptr + 0, undefined); 24 x["mimeType"] = A.load.Ref(ptr + 4, undefined); 25 return create === A.H.TRUE ? A.H.push(x) : ref; 26 }, 27 28 "store_ScanOptions": (ptr: Pointer, ref: heap.Ref<any>) => { 29 const x = A.H.get<any>(ref); 30 31 if (typeof x === "undefined") { 32 A.store.Bool(ptr + 9, false); 33 A.store.Ref(ptr + 0, undefined); 34 A.store.Bool(ptr + 8, false); 35 A.store.Int32(ptr + 4, 0); 36 } else { 37 A.store.Bool(ptr + 9, true); 38 A.store.Ref(ptr + 0, x["mimeTypes"]); 39 A.store.Bool(ptr + 8, "maxImages" in x ? true : false); 40 A.store.Int32(ptr + 4, x["maxImages"] === undefined ? 0 : (x["maxImages"] as number)); 41 } 42 }, 43 "load_ScanOptions": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => { 44 const x = create === A.H.TRUE ? {} : A.H.get<any>(ref); 45 46 x["mimeTypes"] = A.load.Ref(ptr + 0, undefined); 47 if (A.load.Bool(ptr + 8)) { 48 x["maxImages"] = A.load.Int32(ptr + 4); 49 } else { 50 delete x["maxImages"]; 51 } 52 return create === A.H.TRUE ? A.H.push(x) : ref; 53 }, 54 "has_Scan": (): heap.Ref<boolean> => { 55 if (WEBEXT?.documentScan && "scan" in WEBEXT?.documentScan) { 56 return A.H.TRUE; 57 } 58 return A.H.FALSE; 59 }, 60 "func_Scan": (fn: Pointer): void => { 61 A.store.Ref(fn, WEBEXT.documentScan.scan); 62 }, 63 "call_Scan": (retPtr: Pointer, options: Pointer): void => { 64 const options_ffi = {}; 65 66 options_ffi["mimeTypes"] = A.load.Ref(options + 0, undefined); 67 if (A.load.Bool(options + 8)) { 68 options_ffi["maxImages"] = A.load.Int32(options + 4); 69 } 70 71 const _ret = WEBEXT.documentScan.scan(options_ffi); 72 A.store.Ref(retPtr, _ret); 73 }, 74 "try_Scan": (retPtr: Pointer, errPtr: Pointer, options: Pointer): heap.Ref<boolean> => { 75 try { 76 const options_ffi = {}; 77 78 options_ffi["mimeTypes"] = A.load.Ref(options + 0, undefined); 79 if (A.load.Bool(options + 8)) { 80 options_ffi["maxImages"] = A.load.Int32(options + 4); 81 } 82 83 const _ret = WEBEXT.documentScan.scan(options_ffi); 84 A.store.Ref(retPtr, _ret); 85 return A.H.TRUE; 86 } catch (err: any) { 87 A.store.Ref(errPtr, err); 88 return A.H.FALSE; 89 } 90 }, 91 }; 92 });