protospec-build 0.3.0

One binary format language to rule them all, One binary format language to find them, One binary format language to bring them all and in the darkness bind them.
Documentation
use super::*;

mod binary;
pub use binary::*;

mod unary;
pub use unary::*;

mod cast;
pub use cast::*;

mod array_index;
pub use array_index::*;

mod enum_access;
pub use enum_access::*;

mod ternary;
pub use ternary::*;

mod call;
pub use call::*;

mod ident;
pub use ident::*;

mod string;
pub use string::*;

mod int;
pub use int::*;

mod boolean;
pub use boolean::*;

mod member;
pub use member::*;

#[derive(Clone, Serialize, Deserialize)]
pub enum Expression {
    Binary(BinaryExpression),
    Unary(UnaryExpression),
    Cast(CastExpression),
    ArrayIndex(ArrayIndexExpression),
    EnumAccess(EnumAccessExpression),
    Int(Int),
    Ref(Ident),
    Str(Str),
    Ternary(TernaryExpression),
    Bool(Bool),
    Call(CallExpression),
    Member(MemberExpression),
}

impl Node for Expression {
    fn span(&self) -> &Span {
        match self {
            Expression::Binary(x) => x.span(),
            Expression::Unary(x) => x.span(),
            Expression::Cast(x) => x.span(),
            Expression::ArrayIndex(x) => x.span(),
            Expression::EnumAccess(x) => x.span(),
            Expression::Int(x) => x.span(),
            Expression::Ref(x) => x.span(),
            Expression::Str(x) => x.span(),
            Expression::Ternary(x) => x.span(),
            Expression::Bool(x) => x.span(),
            Expression::Call(x) => x.span(),
            Expression::Member(x) => x.span(),
        }
    }
}