fastxdr 1.0.2

Generate Rust types from XDR specs with fast, zero-copy deserialisation
Documentation
use super::*;
#[derive(Debug, PartialEq)]
pub(crate) enum Node<'a> {
    Ident(&'a str),
    Type(BasicType),
    Option(Vec<Node<'a>>),
    Struct(Struct),
    Union(Union),
    UnionCase(Vec<Node<'a>>),
    UnionDefault(Vec<Node<'a>>),
    UnionVoid,
    StructDataField(Vec<Node<'a>>),
    UnionDataField(Vec<Node<'a>>),
    Array(Vec<Node<'a>>),
    ArrayVariable(&'a str),
    ArrayFixed(&'a str),
    Typedef(Typedef),
    Constant(Vec<Node<'a>>),
    Enum(Enum),
    EnumVariant(Vec<Node<'a>>),
    Root(Vec<Node<'a>>),

    EOF,
}

impl<'a> Node<'a> {
    pub(crate) fn ident_str(&'a self) -> &'a str {
        match self {
            Node::Ident(v) => match v.trim() {
                "type" => "type_t",
                v => v,
            },
            Node::Type(v) => v.as_str(),
            Node::Option(v) => v[0].ident_str(),
            _ => panic!("not an ident"),
        }
    }

    #[cfg(test)]
    pub(crate) fn into_inner(self) -> Vec<Node<'a>> {
        match self {
            Self::Option(v) => v,
            Self::UnionCase(v) => v,
            Self::UnionDefault(v) => v,
            Self::StructDataField(v) => v,
            Self::UnionDataField(v) => v,
            Self::Array(v) => v,
            Self::Constant(v) => v,
            Self::EnumVariant(v) => v,
            Self::Root(v) => v,
            _ => panic!("no node inner"),
        }
    }
}