boltffi_bindgen 0.24.1

Code generation library for BoltFFI - generates Swift, Kotlin, and TypeScript bindings
Documentation
{{ self::swift_doc_block(doc, "") }}public enum {{ class_name }}: Hashable, Equatable, Sendable{% if is_error %}, Error{% endif %} {
{%- for variant in variants %}
{%- if variant.is_unit() %}
{{ self::swift_doc_block(variant.doc, "    ") }}    case {{ variant.swift_name }}
{%- elif variant.is_single_tuple() %}
{{ self::swift_doc_block(variant.doc, "    ") }}    case {{ variant.swift_name }}({{ variant.fields()[0].swift_type }})
{%- else %}
{{ self::swift_doc_block(variant.doc, "    ") }}    case {{ variant.swift_name }}({% for field in variant.fields() %}{{ field.swift_name }}: {{ field.swift_type }}{% if !loop.last %}, {% endif %}{% endfor %})
{%- endif %}
{%- endfor %}

}

extension {{ class_name }}: WireCodable {
    @inlinable static func decode(from reader: inout WireReader) -> {{ class_name }} {
        let tag = reader.readI32()
        switch tag {
{%- for variant in variants %}
        case {{ loop.index0 }}:
{%- if variant.is_unit() %}
            return .{{ variant.swift_name }}
{%- elif variant.is_single_tuple() %}
            return .{{ variant.swift_name }}({{ variant.tuple_value_reader_decode() }})
{%- else %}
            return .{{ variant.swift_name }}({% for field in variant.fields() %}{{ field.swift_name }}: {{ field.wire_reader_decode() }}{% if !loop.last %}, {% endif %}{% endfor %})
{%- endif %}
{%- endfor %}
        default:
            fatalError("Invalid {{ class_name }} tag: \(tag)")
        }
    }

    @inlinable func encode(to writer: inout WireWriter) {
        switch self {
{%- for variant in variants %}
{%- if variant.is_unit() %}
        case .{{ variant.swift_name }}:
            writer.writeI32({{ loop.index0 }})
{%- elif variant.is_single_tuple() %}
        case let .{{ variant.swift_name }}(value):
            writer.writeI32({{ loop.index0 }})
            {{ variant.tuple_value_writer_encode() }}
{%- else %}
        case let .{{ variant.swift_name }}({% for field in variant.fields() %}{{ field.swift_name }}{% if !loop.last %}, {% endif %}{% endfor %}):
            writer.writeI32({{ loop.index0 }})
{%- for field in variant.fields() %}
            {{ field.wire_writer_encode() }}
{%- endfor %}
{%- endif %}
{%- endfor %}
        }
    }
}
{%- if !constructors.is_empty() || !methods.is_empty() %}

extension {{ class_name }} {
{%- for ctor in constructors %}
{%- if ctor.is_factory() %}

{{ self::swift_doc_block(ctor.doc(), "    ") }}    public static func {{ ctor.name().unwrap() }}(){% if ctor.is_fallible() %} throws{% endif %} -> {{ class_name }}{% if ctor.is_optional() %}?{% endif %} {
        let buf = {{ ctor.ffi_symbol() }}()
        defer { {{ prefix }}_free_buf(buf) }
{%- if ctor.is_optional() %}
        return boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in reader.readOptional { reader in {{ class_name }}.decode(from: &reader) } }
{%- elif ctor.is_fallible() %}
        return try boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in
            try reader.readResultOrThrow(ok: { reader in {{ class_name }}.decode(from: &reader) }, err: { reader in {{ ctor.throw_decode_expr().unwrap() }} })
        }
{%- else %}
        return boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in
            {{ class_name }}.decode(from: &reader)
        }
{%- endif %}
    }
{%- else %}

{{ self::swift_doc_block(ctor.doc(), "    ") }}    public init{% if ctor.is_optional() %}?{% endif %}({% for p in ctor.params() %}{{ p.signature() }}{% if !loop.last %}, {% endif %}{% endfor %}){% if ctor.is_fallible() %} throws{% endif %} {
{%- for param in ctor.params() %}
{%- if let Some(wrapper) = param.wrapper_code() %}
        {{ wrapper }}
{%- endif %}
{%- endfor %}
        let buf = {% for w in ctor.annotated_closure_wrappers() %}{{ w }} {% endfor %}{{ ctor.call_expr() }}{% for _ in ctor.closure_wrappers() %} }{% endfor %}

        defer { {{ prefix }}_free_buf(buf) }
{%- if ctor.is_optional() %}
        guard let value: {{ class_name }} = boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len), { reader in reader.readOptional { reader in {{ class_name }}.decode(from: &reader) } }) else { return nil }
        self = value
{%- elif ctor.is_fallible() %}
        self = try boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in
            try reader.readResultOrThrow(ok: { reader in {{ class_name }}.decode(from: &reader) }, err: { reader in {{ ctor.throw_decode_expr().unwrap() }} })
        }
{%- else %}
        self = boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in
            {{ class_name }}.decode(from: &reader)
        }
{%- endif %}
    }
{%- endif %}
{%- endfor %}
{%- for method in methods %}

{{ self::swift_doc_block(method.doc, "    ") }}    public{% if method.is_mutating() %} mutating{% elif method.is_static %} static{% endif %} func {{ method.name }}({% for p in method.params %}{{ p.signature() }}{% if !loop.last %}, {% endif %}{% endfor %}){% if method.returns.is_throws() %} throws{% endif %}{% if !method.mutating_void %}{% if let Some(ret) = method.returns.swift_type() %} -> {{ ret }}{% endif %}{% endif %} {
{%- match method.mode %}
{%- when SwiftCallMode::Sync { symbol } %}
{%- for param in method.params %}
{%- if let Some(wrapper) = param.wrapper_code() %}
        {{ wrapper }}
{%- endif %}
{%- endfor %}
{%- if let Some(rs) = method.value_self %}
{%- if let Some(wrapper) = rs.wrapper_code %}
        {{ wrapper }}
{%- endif %}
{%- endif %}
{%- for open in method.sync_closure_opens() %}
{{ open }}
{%- endfor %}
{%- if method.returns.is_void() %}
{{ method.method_body_indent() }}{{ method.sync_call_expr() }}
{%- elif method.returns.is_wire_encoded() %}
{{ method.method_body_indent() }}let buf = {{ method.sync_call_expr() }}
{{ method.method_body_indent() }}defer { {{ prefix }}_free_buf(buf) }
{%- if let Some(reader_expr) = method.returns.reader_decode_expr() %}
{%- if method.is_mutating() %}
{{ method.method_body_indent() }}self = boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in {{ reader_expr }} }
{%- elif method.returns.is_throws() %}
{{ method.method_body_indent() }}return try boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in {{ reader_expr }} }
{%- else %}
{{ method.method_body_indent() }}return boltffiDecodeOwnedBuf(buf.ptr, Int(buf.len)) { reader in {{ reader_expr }} }
{%- endif %}
{%- endif %}
{%- elif method.returns.is_composite() %}
{%- if let Some(convert_expr) = method.returns.composite_convert_expr("_raw") %}
{{ method.method_body_indent() }}let _raw = {{ method.sync_call_expr() }}
{%- if method.is_mutating() %}
{{ method.method_body_indent() }}self = {{ convert_expr }}
{%- else %}
{{ method.method_body_indent() }}return {{ convert_expr }}
{%- endif %}
{%- endif %}
{%- elif method.returns.is_c_style_enum() %}
{%- if method.is_mutating() %}
{{ method.method_body_indent() }}self = {{ method.returns.c_style_enum_type().unwrap() }}(rawValue: {{ method.sync_call_expr() }})!
{%- else %}
{{ method.method_body_indent() }}return {{ method.returns.c_style_enum_type().unwrap() }}(rawValue: {{ method.sync_call_expr() }})!
{%- endif %}
{%- else %}
{{ method.method_body_indent() }}return {{ method.sync_call_expr() }}
{%- endif %}
{%- for close in method.sync_closure_closes() %}
{{ close }}
{%- endfor %}
{%- when SwiftCallMode::Async { start, poll, complete, cancel, free, result } %}
{%- endmatch %}
    }
{%- endfor %}
}
{%- endif %}