    pub fn {{ method_name }}(self: *{{ type_name }}, {{ req_param }}: []const u8) ({{ zig_error_type }}||error{OutOfMemory})!{{ struct_name }} {
        const {{ req_param_lower }}_z = try std.heap.c_allocator.dupeZ(u8, {{ req_param_lower }});
        const {{ req_param_lower }}_handle = c.{{ prefix }}_{{ req_type_snake }}_from_json({{ req_param_lower }}_z.ptr);
        std.heap.c_allocator.free({{ req_param_lower }}_z);
        if ({{ req_param_lower }}_handle == null) { return _first_error({{ zig_error_type }}); }
        defer c.{{ prefix }}_{{ req_type_snake }}_free({{ req_param_lower }}_handle);
        const _stream_handle = c.{{ prefix }}_{{ type_snake }}_{{ method_snake }}_start({{ c_handle_cast }}, {{ req_param_lower }}_handle);
        if (_stream_handle == null) { return _first_error({{ zig_error_type }}); }
        return {{ struct_name }}{ ._handle = _stream_handle };
    }
