blob: aeb5f58002ed30417ff5dcc411dc5d989a7b56a7 (
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
|
{%- match config.custom_types.get(name.as_str()) %}
{%- when None %}
{#- Define the type using typealiases to the builtin #}
/**
* Typealias from the type name used in the UDL file to the builtin type. This
* is needed because the UDL type name is used in function/method signatures.
* It's also what we have an external type that references a custom type.
*/
public typealias {{ name }} = {{ builtin|type_name(ci) }}
public typealias {{ ffi_converter_name }} = {{ builtin|ffi_converter_name }}
{%- when Some with (config) %}
{%- let ffi_type_name=builtin|ffi_type|ffi_type_name_by_value %}
{# When the config specifies a different type name, create a typealias for it #}
{%- match config.type_name %}
{%- when Some(concrete_type_name) %}
/**
* Typealias from the type name used in the UDL file to the custom type. This
* is needed because the UDL type name is used in function/method signatures.
* It's also what we have an external type that references a custom type.
*/
public typealias {{ name }} = {{ concrete_type_name }}
{%- else %}
{%- endmatch %}
{%- match config.imports %}
{%- when Some(imports) %}
{%- for import_name in imports %}
{{ self.add_import(import_name) }}
{%- endfor %}
{%- else %}
{%- endmatch %}
public object {{ ffi_converter_name }}: FfiConverter<{{ name }}, {{ ffi_type_name }}> {
override fun lift(value: {{ ffi_type_name }}): {{ name }} {
val builtinValue = {{ builtin|lift_fn }}(value)
return {{ config.into_custom.render("builtinValue") }}
}
override fun lower(value: {{ name }}): {{ ffi_type_name }} {
val builtinValue = {{ config.from_custom.render("value") }}
return {{ builtin|lower_fn }}(builtinValue)
}
override fun read(buf: ByteBuffer): {{ name }} {
val builtinValue = {{ builtin|read_fn }}(buf)
return {{ config.into_custom.render("builtinValue") }}
}
override fun allocationSize(value: {{ name }}): ULong {
val builtinValue = {{ config.from_custom.render("value") }}
return {{ builtin|allocation_size_fn }}(builtinValue)
}
override fun write(value: {{ name }}, buf: ByteBuffer) {
val builtinValue = {{ config.from_custom.render("value") }}
{{ builtin|write_fn }}(builtinValue, buf)
}
}
{%- endmatch %}
|