alef 0.25.40

Opinionated polyglot binding generator for Rust libraries
Documentation
    public static {{ return_type }} {{ method_name }}({{ params }}) throws {{ exception_class }} {
        try (var arena = Arena.ofShared();
             var bridge = new VisitorBridge({{ visitor_arg }})) {
            {{ marshal_body }}

            var visitorHandle = (MemorySegment) NativeLib.{{ prefix_upper }}_VISITOR_CREATE.invoke(bridge.callbacksStruct());
            if (visitorHandle.equals(MemorySegment.NULL)) {
                throw new {{ exception_class }}("Failed to create visitor handle", null);
            }

            try {
                {{ invoke_body }}
            } catch (Throwable e) {
                throw new {{ exception_class }}("FFI call failed", e);
            } finally {
                NativeLib.{{ prefix_upper }}_VISITOR_FREE.invoke(visitorHandle);
                bridge.rethrowVisitorError();
            }
        } catch ({{ exception_class }} e) {
            throw e;
        } catch (Throwable e) {
            throw new {{ exception_class }}("FFI call failed", e);
        }
    }