{{ self::ts_doc_block(doc, "") }}export enum {{ name }} {
{%- for variant in variants %}
{{ self::ts_doc_block(variant.doc, "  ") }}  {{ variant.name }} = {{ variant.discriminant }},
{%- endfor %}
}

const {{ name }}Codec: WireCodec<{{ name }}> = {
  size: (_v) => {{ self::ts_c_style_enum_size_bytes(tag_type) }},
  encode: (writer, v) => { {{ self::ts_c_style_enum_write_expr(tag_type) }}; },
  decode: (reader) => {
    const value = {{ self::ts_c_style_enum_read_expr(tag_type) }};
    switch (value) {
{%- for variant in variants %}
      case {{ variant.discriminant }}: return {{ name }}.{{ variant.name }};
{%- endfor %}
      default: throw new Error(`Unknown {{ name }} discriminant: ${value}`);
    }
  },
};
