summaryrefslogtreecommitdiffstats
path: root/toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs')
-rw-r--r--toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs62
1 files changed, 62 insertions, 0 deletions
diff --git a/toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs b/toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs
new file mode 100644
index 0000000000..d0dfed6c85
--- /dev/null
+++ b/toolkit/components/uniffi-bindgen-gecko-js/src/templates/js/macros.sys.mjs
@@ -0,0 +1,62 @@
+{%- macro call_scaffolding_function(func) %}
+{%- call _call_scaffolding_function(func, func.return_type(), "", func.is_js_async(config)) -%}
+{%- endmacro %}
+
+{%- macro call_constructor(cons, object_type, is_async) %}
+{%- call _call_scaffolding_function(cons, Some(object_type), "", is_async) -%}
+{%- endmacro %}
+
+{%- macro call_method(method, object_type, is_async) %}
+{%- call _call_scaffolding_function(method, method.return_type(), object_type.ffi_converter(), is_async) -%}
+{%- endmacro %}
+
+{%- macro _call_scaffolding_function(func, return_type, receiver_ffi_converter, is_async) %}
+ {%- match return_type %}
+ {%- when Some with (return_type) %}
+ const liftResult = (result) => {{ return_type.ffi_converter() }}.lift(result);
+ {%- else %}
+ const liftResult = (result) => undefined;
+ {%- endmatch %}
+ {%- match func.throws_type() %}
+ {%- when Some with (err_type) %}
+ const liftError = (data) => {{ err_type.ffi_converter() }}.lift(data);
+ {%- else %}
+ const liftError = null;
+ {%- endmatch %}
+ const functionCall = () => {
+ {%- for arg in func.arguments() %}
+ try {
+ {{ arg.ffi_converter() }}.checkType({{ arg.nm() }})
+ } catch (e) {
+ if (e instanceof UniFFITypeError) {
+ e.addItemDescriptionPart("{{ arg.nm() }}");
+ }
+ throw e;
+ }
+ {%- endfor %}
+
+ {%- if is_async %}
+ return UniFFIScaffolding.callAsync(
+ {%- else %}
+ return UniFFIScaffolding.callSync(
+ {%- endif %}
+ {{ function_ids.get(ci, func.ffi_func()) }}, // {{ function_ids.name(ci, func.ffi_func()) }}
+ {%- if receiver_ffi_converter != "" %}
+ {{ receiver_ffi_converter }}.lower(this),
+ {%- endif %}
+ {%- for arg in func.arguments() %}
+ {{ arg.lower_fn() }}({{ arg.nm() }}),
+ {%- endfor %}
+ )
+ }
+
+ {%- if is_async %}
+ try {
+ return functionCall().then((result) => handleRustResult(result, liftResult, liftError));
+ } catch (error) {
+ return Promise.reject(error)
+ }
+ {%- else %}
+ return handleRustResult(functionCall(), liftResult, liftError);
+ {%- endif %}
+{%- endmacro %}