blob: 44de9dd358bd144c5ade8766ef2a58abc667b01a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
{%- let rec = ci|get_record_definition(name) %}
public struct {{ type_name }} {
{%- for field in rec.fields() %}
public var {{ field.name()|var_name }}: {{ field|type_name }}
{%- endfor %}
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init({% call swift::field_list_decl(rec) %}) {
{%- for field in rec.fields() %}
self.{{ field.name()|var_name }} = {{ field.name()|var_name }}
{%- endfor %}
}
}
{% if !contains_object_references %}
extension {{ type_name }}: Equatable, Hashable {
public static func ==(lhs: {{ type_name }}, rhs: {{ type_name }}) -> Bool {
{%- for field in rec.fields() %}
if lhs.{{ field.name()|var_name }} != rhs.{{ field.name()|var_name }} {
return false
}
{%- endfor %}
return true
}
public func hash(into hasher: inout Hasher) {
{%- for field in rec.fields() %}
hasher.combine({{ field.name()|var_name }})
{%- endfor %}
}
}
{% endif %}
public struct {{ ffi_converter_name }}: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> {{ type_name }} {
return try {{ type_name }}(
{%- for field in rec.fields() %}
{{ field.name()|arg_name }}: {{ field|read_fn }}(from: &buf)
{%- if !loop.last %}, {% endif %}
{%- endfor %}
)
}
public static func write(_ value: {{ type_name }}, into buf: inout [UInt8]) {
{%- for field in rec.fields() %}
{{ field|write_fn }}(value.{{ field.name()|var_name }}, into: &buf)
{%- endfor %}
}
}
{#
We always write these public functions just in case the struct is used as
an external type by another crate.
#}
public func {{ ffi_converter_name }}_lift(_ buf: RustBuffer) throws -> {{ type_name }} {
return try {{ ffi_converter_name }}.lift(buf)
}
public func {{ ffi_converter_name }}_lower(_ value: {{ type_name }}) -> RustBuffer {
return {{ ffi_converter_name }}.lower(value)
}
|