
{%- if f.is_message %}
{#- [optional|repeated] MyMessage => &'this MyMessageBumpalo<'this> #}
type {{ f.ident_camel_unesc }}MessageType<'this> where Self: 'this = &'this {{ f.bumpalo_field_message_path }};
{%- endif %} {#- if f.is_message #}

{%- if f.is_repeated %}

{#- repeated i32 =>  CloneThenIntoRepeatedField<'this, NoAllocBumpVec<i32>, i32, i32> #}
{#- repeated String => AsRefRepeatedField<'this, NoAllocBumpVec<NoAllocBumpString>, NoAllocBumpString, str> #}
{#- repeated MyMessage => &'this [MyMessageBumpalo<'this>] #}
type {{ f.ident_camel_unesc }}RepeatedType<'this> where Self: 'this =
{%- if f.is_length_delimited %}
{%- if f.is_message %}
    &'this [{{ f.bumpalo_field_message_path }}];
{%- else %} {#- if f.is_message #}
    ::puroro::AsRefRepeatedField<
        'this,
        {{ f.bumpalo_field_type }},
        {{ f.bumpalo_field_rep_item_type }},
        {%- if f.is_string %}str,{% endif %}
        {%- if f.is_bytes %}[u8],{% endif %}
    >;
{%- endif %} {#- if f.is_message #}
{%- else %} {#- if f.is_length_delimited #}
    ::puroro::CloneThenIntoRepeatedField<'this, {{ f.bumpalo_field_type }}, {{ f.trait_scalar_getter_type }}, {{ f.trait_scalar_getter_type }}>;
{%- endif %} {#- if f.is_length_delimited #}

fn {{ f.ident }}<'this>(&'this self) -> Self::{{ f.ident_camel_unesc }}RepeatedType<'this> {
    {%- if f.is_length_delimited %}
    {%- if f.is_message %}
    unsafe { self.{{ f.ident }}.cast_item_unchecked() }
    {%- else %} {#- if f.is_message #}
    ::puroro::AsRefRepeatedField::new(&self.{{ f.ident }})
    {%- endif %} {#- if f.is_message #}
    {%- else %} {#- if f.is_length_delimited #}
    ::puroro::CloneThenIntoRepeatedField::new(&self.{{ f.ident }})
    {%- endif %} {#- if f.is_length_delimited #}
}

{%- else %} {#- if f.is_repeated #}

{#- [optional] int32 => Option<i32> #}
{#- [optional] String => Option<&'this str> #}
{#- [optional] MyMessage => Option<&'this MyMessageBumpalo<'this>> #}
fn {{ f.ident_unesc }}_opt<'this>(&'this self) -> Option<{{ f.trait_scalar_getter_type }}> {
    <Self>::{{ f.ident_unesc }}_opt(self)
}

{%- endif %} {#- if f.is_repeated #}
