alef 0.79.4

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)
                {
                    throw {{ exception_name }}.FromLastError("Unknown error");
                }
                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)
            {
                throw {{ exception_name }}.FromLastError("Unknown error");
            }
            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 %}