codgenhelp 0.0.1

Simplifies structure and enum parsing in Macros1.1
Documentation
pub mod enumerator;
pub use self::enumerator::{Variant,Enumerator};
pub mod structure;
pub use self::structure::{Structure};
pub mod field;
pub use self::field::{Field,Fields};

use super::syn::Body;


macro_rules! is_thing {
    ($name:ident, $ma: pat) => {
        #[inline(always)]
        #[allow(dead_code)]
        pub fn $name(&self) -> bool {
            match self {
                $ma => true,
                _ => false
            }
        }
    }
}

#[derive(Clone,Debug)]
pub enum BodyKind {
    Enum(Enumerator),
    Struct(Structure)
}
impl BodyKind {
    /// Build from `syn`'s Body representation
    pub fn from_body(x: &Body) -> Result<BodyKind,String> {
        match x {
            &Body::Enum(_) => Ok(BodyKind::Enum(Enumerator::from_body(x)?)),
            &Body::Struct(_) => Ok(BodyKind::Struct(Structure::from_body(x)?))
        }
    }
    is_thing!(is_enum,&BodyKind::Enum(_));
    is_thing!(is_struct,&BodyKind::Struct(_));
    ///Returns a structure if that is possible
    pub fn get_struct<'a>(&'a self) -> Option<&'a Structure> {
        match self {
            &BodyKind::Struct(ref s) => Some(s),
            _ => None
        }
    }
    /// Returns a Enum if that is possible
    pub fn get_enum<'a>(&'a self) -> Option<&'a Enumerator> {
        match self {
            &BodyKind::Enum(ref e) => Some(e),
            _ => None
        }
    }
}