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 {
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(_));
pub fn get_struct<'a>(&'a self) -> Option<&'a Structure> {
match self {
&BodyKind::Struct(ref s) => Some(s),
_ => None
}
}
pub fn get_enum<'a>(&'a self) -> Option<&'a Enumerator> {
match self {
&BodyKind::Enum(ref e) => Some(e),
_ => None
}
}
}