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  });