in uniffi_bindgen/src/bindings/ruby/templates/RustBufferStream.rb [200:230]
def read{{ canonical_type_name }}
variant = unpack_from 4, 'l>'
{% if e.is_flat() -%}
{%- for variant in e.variants() %}
if variant == {{ loop.index }}
return {{ error_name|class_name_rb }}::{{ variant.name()|class_name_rb }}.new(
readString()
)
end
{%- endfor %}
raise InternalError, 'Unexpected variant tag for {{ canonical_type_name }}'
{%- else -%}
{%- for variant in e.variants() %}
if variant == {{ loop.index }}
{%- if variant.has_fields() %}
return {{ error_name|class_name_rb }}::{{ variant.name()|class_name_rb }}.new(
{%- for field in variant.fields() %}
read{{ self::canonical_name(field.as_type().borrow()).borrow()|class_name_rb }}(){% if loop.last %}{% else %},{% endif %}
{%- endfor %}
)
{%- else %}
return {{ error_name|class_name_rb }}::{{ variant.name()|class_name_rb }}.new
{%- endif %}
end
{%- endfor %}
raise InternalError, 'Unexpected variant tag for {{ canonical_type_name }}'
{%- endif %}
end