export const enum {{ident}} { {%- for variant in variants %} {{variant.clone().ident()}} = {{variant.clone().value()}}, {%- endfor %} } export function write{{ident}}(value: {{ident}}, sinkOrBuf?: SinkOrBuf,): Sink { const sink = Sink.create(sinkOrBuf); switch (value) { {%- for variant in variants %} case {{variant.clone().value()}}: writeU32({{ loop.index - 1 }}, sink); break; {%- endfor %} default: throw new Error(`'${value}' is invalid value for enum '{{ident}}'`); } return sink; } export function read{{ident}}(sinkOrBuf: SinkOrBuf): {{ident}} { const sink = Sink.create(sinkOrBuf); const value = readU32(sink); switch (value) { {%- for variant in variants %} case {{ loop.index - 1 }}: return {{variant.clone().value()}}; {%- endfor %} default: throw new Error(`'${value}' is invalid value for enum '{{ident}}'`); } }