alef 0.25.37

Opinionated polyglot binding generator for Rust libraries
Documentation
    /**
     * {{ ep_method }}.
     * Invokes C FFI: {{ ffi_prefix }}_{{ service_snake }}_ep_{{ ep_method_snake }}
     */
    public {{ return_type }} {{ ep_method }}({{ params_signature }}) {
        try {
            MemorySegment epAddr = LOOKUP.find("{{ ffi_prefix }}_{{ service_snake }}_ep_{{ ep_method_snake }}")
                .or(() -> LOOKUP.find("_{{ ffi_prefix }}_{{ service_snake }}_ep_{{ ep_method_snake }}"))
                .orElseThrow();
            FunctionDescriptor epDesc = FunctionDescriptor.of(
{{ return_layout }}                ValueLayout.ADDRESS       // owner: *mut opaque
{% for layout in descriptor_layouts %}
                , {{ layout.0 }}    // {{ layout.1 }} param
{% endfor %}            );
            MethodHandle epHandle = LINKER.downcallHandle(epAddr, epDesc);
            {% if return_type == "void" %}epHandle.invoke(ownerHandle{% else %}return (long) epHandle.invoke(ownerHandle{% endif %}
{% for arg in invoke_args %}
                , {{ arg }}
{% endfor %}            );

        } catch (Throwable e) {
            throw new RuntimeException("Failed to invoke entrypoint", e);
        }
    }