export interface {{ident}} { {%- if self.is_tuple() -%} {% for (id, ty) in fields %} {{ loop.index - 1 }}: {{ ty.ts_type() }}; {%- endfor %} {%- else -%} {% for (id, ty) in fields %} {{ id.clone().unwrap() }}: {{ ty.ts_type() }}; {%- endfor %} {%- endif %} } export function write{{ident}}(value: {{ident}}, sinkOrBuf?: SinkOrBuf): Sink { const sink = Sink.create(sinkOrBuf); {%- for (id, ty) in fields -%} {%- match id -%} {%- when Some with (id) %} {{ ty.writer() }}(value.{{id}}, sink); {%- when None %} {{ ty.writer() }}(value[{{loop.index - 1}}], sink); {%- endmatch%} {%- endfor %} return sink; } export function read{{ident}}(sinkOrBuf: SinkOrBuf): {{ident}} { const sink = Sink.create(sinkOrBuf); {% if self.is_tuple() -%} return [ {%- for (id, ty) in fields %} {{ ty.reader() }}(sink), {%- endfor %} ]; {%- else -%} return { {%- for (id, ty) in fields %} {{id.clone().unwrap()}}: {{ ty.reader() }}(sink), {%- endfor %} }; {%- endif %} }