map opaque struct header
[ldk-java] / typescript_strings.py
index 5c1a36d561168c4231a334ec49570dc52af495e0..cbde654d453ae302847e8018fde36d1dbfebfc88 100644 (file)
@@ -1,13 +1,17 @@
 from bindingstypes import ConvInfo
-
+from enum import Enum
 
 def first_to_lower(string: str) -> str:
     first = string[0]
     return first.lower() + string[1:]
 
 
+class Target(Enum):
+    NODEJS = 1,
+    BROWSER = 2
+
 class Consts:
-    def __init__(self, DEBUG):
+    def __init__(self, DEBUG: bool, target: Target, **kwargs):
 
         self.c_type_map = dict(
             uint8_t = ['number', 'Uint8Array'],
@@ -21,20 +25,7 @@ class Consts:
             default = 'const {var_name}_hu_conv: {human_type} = new {human_type}(null, {var_name});',
         )
 
-        self.bindings_header = """
-    
-const path = require('path').join(__dirname, 'bindings.wasm');
-const bytes = require('fs').readFileSync(path);
-let imports = {};
-// add all exports to dictionary and move down?
-// use `module.exports`?
-// imports['./bindings.js'] = require('./bindings.js');
-
-const wasmModule = new WebAssembly.Module(bytes);
-const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
-// module.exports = wasmInstance.exports;
-const wasm = wasmInstance.exports;
-        
+        self.bindings_header = self.wasm_import_header(target) + """
 export class VecOrSliceDef {
     public dataptr: number;
     public datalen: number;
@@ -262,6 +253,24 @@ import * as bindings from '../bindings' // TODO: figure out location
         else:
             return None
 
+
+    def wasm_import_header(self, target):
+        if target == Target.NODEJS:
+            return """
+const path = require('path').join(__dirname, 'bindings.wasm');
+const bytes = require('fs').readFileSync(path);
+let imports = {};
+// add all exports to dictionary and move down?
+// use `module.exports`?
+// imports['./bindings.js'] = require('./bindings.js');
+
+const wasmModule = new WebAssembly.Module(bytes);
+const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
+// module.exports = wasmInstance.exports;
+const wasm = wasmInstance.exports;
+            """
+        return ''
+
     def init_str(self, c_array_class_caches):
         return ""
 
@@ -717,3 +726,34 @@ import * as bindings from '../bindings' // TODO: figure out location
         out_java_enum += ("}\n")
         out_java_enum += (java_hu_subclasses)
         return (out_java, out_java_enum, out_c)
+
+    def map_opaque_struct(self, struct_name):
+
+        implementations = ""
+        method_header = ""
+        if struct_name.startswith("LDKLocked"):
+            implementations += "implements AutoCloseable "
+            method_header = """
+                public close() {
+            """
+        else:
+            method_header = """
+                protected finalize() {
+                    super.finalize();
+            """
+
+        out_opaque_struct_human = f"""
+            {self.hu_struct_file_prefix}
+            
+            export default class {struct_name.replace("LDK","")} extends CommonBase {implementations}{{
+                constructor(_dummy: object, ptr: number) {{
+                    super(ptr);
+                }}
+                
+                {method_header}
+                    if (this.ptr != 0) {{
+                        bindings.{struct_name.replace("LDK","")}_free(this.ptr);
+                    }}
+                }}
+        """
+        return out_opaque_struct_human