alef 0.67.6

Opinionated polyglot binding generator for Rust libraries
Documentation
{% if is_async %}
        return await Task.Run(() =>
        {
{{ receiver_guard }}            var rc = NativeMethods.{{ native_method_name }}(
{{ args_block }}                out var outPtr,
                out var outLen,
                out var outCap
            );
{% if consumes_receiver %}
            handleTransfer.Commit();
{% endif %}
            try
            {
                if (rc != 0)
                {
                    var ec = NativeMethods.LastErrorCode();
                    var ctxPtr = NativeMethods.LastErrorContext();
                    var msg = System.Runtime.InteropServices.Marshal.PtrToStringUTF8(ctxPtr) ?? "Unknown error";
                    throw new {{ exception_name }}(ec, msg);
                }
                var result = new byte[(int)outLen];
                System.Runtime.InteropServices.Marshal.Copy(outPtr, result, 0, (int)outLen);
                return result;
            }
            finally
            {
                NativeMethods.FreeBytes(outPtr, outLen, outCap);
            }
        });
{% else %}
{{ receiver_guard }}        var rc = NativeMethods.{{ native_method_name }}(
{{ args_block }}            out var outPtr,
            out var outLen,
            out var outCap
        );
{% if consumes_receiver %}
        handleTransfer.Commit();
{% endif %}
        try
        {
            if (rc != 0)
            {
                var ec = NativeMethods.LastErrorCode();
                var ctxPtr = NativeMethods.LastErrorContext();
                var msg = System.Runtime.InteropServices.Marshal.PtrToStringUTF8(ctxPtr) ?? "Unknown error";
                throw new {{ exception_name }}(ec, msg);
            }
            var result = new byte[(int)outLen];
            System.Runtime.InteropServices.Marshal.Copy(outPtr, result, 0, (int)outLen);
            return result;
        }
        finally
        {
            NativeMethods.FreeBytes(outPtr, outLen, outCap);
        }
{% endif %}