reis 0.2.0

Pure Rust implementation of libei/libeis protocol.
Documentation
{# ei-scanner jinja template, for `` #}
#![allow(unused_imports, unused_parens, clippy::useless_conversion, clippy::double_parens, clippy::match_single_binding, clippy::unused_unit)]

// GENERATED FILE

{% for interface in interfaces %}
pub(crate) mod {{interface.plainname}} {
    use crate::wire;

    {% for enum in interface.enums %}
     /** {{enum.description.text|ei_escape_names}} */
    #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
    pub enum {{enum.camel_name}} {
        {% for entry in enum.entries %}
        /** {{entry.summary}} */
        {{entry.name|camel}} = {{entry.value}},
        {% endfor %}
    }

    impl From<{{enum.camel_name}}> for u32 {
        fn from(value: {{enum.camel_name}}) -> u32 {
            value as u32
        }
    }

    impl wire::OwnedArg for {{enum.camel_name}} {
        fn parse(buf: &mut wire::ByteStream) -> Result<Self, wire::ParseError> {
            match u32::parse(buf)? {
            {% for entry in enum.entries %}
                {{entry.value}} => Ok(Self::{{entry.name|camel}}),
            {% endfor %}
        variant => Err(wire::ParseError::InvalidVariant("{{enum.camel_name}}", variant)),
            }
        }

        fn as_arg(&self) -> wire::Arg<'_> {
            wire::Arg::Uint32(*self as u32)
        }

        fn enum_name(&self) -> Option<(&'static str, &'static str)> {
            Some(("{{enum.name}}", match self {
                {% for entry in enum.entries %}
                Self::{{entry.name|camel}} => "{{entry.name}}",
                {% endfor %}
            }
            ))
        }
    }
    {% endfor %}
}

{% endfor %}