
pub(crate) enum {{ oneof.simple_enum_ident }} {
    _None,
    {%- for f in oneof.fields %}
    {{ f.ident }}({{ f.simple_field_type }}),
    {%- endfor %}
}

impl ::std::default::Default for {{ oneof.simple_enum_ident }} {
    fn default() -> Self {
        Self::_None
    }
}

{#- Not used by the owner's `Debug` impl.#}
impl ::std::fmt::Debug for {{ oneof.simple_enum_ident }} {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        match self {
            Self::_None => f.write_str("None"),
            {%- for f in oneof.fields %}
            Self::{{ f.ident }}(v) => f
                .debug_tuple("{{ oneof.simple_enum_ident }}::{{ f.ident }}")
                .field(&v)
                .finish(),
            {%- endfor %} {#- for f in oneof.fields #}
        }
    }
}

impl ::std::clone::Clone for {{ oneof.simple_enum_ident }} {
    fn clone(&self) -> Self {
        match self {
            Self::_None => Self::_None,
            {%- for f in oneof.fields %}
            Self::{{ f.ident }}(v) => Self::{{ f.ident }}(
                ::std::clone::Clone::clone(&v)
            ),
            {%- endfor %} {#- for f in oneof.fields #}
        }
    }
}

impl ::std::cmp::PartialEq for {{ oneof.simple_enum_ident }} {
    fn eq(&self, rhs: &Self) -> bool {
        match (self, rhs) {
            (Self::_None, Self::_None) => true,
            {%- for f in oneof.fields %}
            (Self::{{ f.ident }}(left), Self::{{ f.ident }}(right)) => left == right,
            {%- endfor %} {#- for f in oneof.fields #}
            #[allow(unreachable_patterns)]
            _ => false,
        }
    }
}

