Source code

Revision control

Copy as Markdown

Other Tools

{%- 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 %}