macro_rules! cst {
($c:expr) => {
crate::expression::Constant::try_from($c).unwrap()
};
}
macro_rules! cst_exp {
($c:expr) => {
crate::expression::Expression::constant(crate::expression::macros::cst!($c))
};
}
macro_rules! lit {
($lit:expr) => {
crate::expression::Expression::from($lit)
};
}
macro_rules! var {
($ident:expr) => {
crate::expression::Variable::new($ident)
};
}
macro_rules! lambda {
([ $var:expr ], $expr:expr) => {
crate::expression::Lambda::new($var, $expr)
};
}
macro_rules! fc_exp {
($ident:expr, [ $( $expr:expr ),+ ], $lambda:expr) => {{
let fc = crate::expression::macros::fc!($ident, [ $( $expr ),+ ] , $lambda);
crate::expression::Expression::func_call(fc)
}};
($ident:expr, $( $expr:expr ),+) => {{
let fc = crate::expression::macros::fc!($ident, $( $expr ),+ );
crate::expression::Expression::func_call(fc)
}};
}
macro_rules! fc {
($ident:expr, [ $( $expr:expr ),+], $lambda:expr ) => {
crate::expression::FuncCall::new($ident, vec![ $( $expr ),+ ], Some($lambda))
};
($ident:expr, $( $expr:expr ),+) => {
crate::expression::FuncCall::new($ident, vec![ $( $expr ),+ ], None)
};
}
macro_rules! node {
($left:expr, $op:expr, $right:expr) => {
crate::expression::Expression::ast(crate::expression::Node::new(
crate::expression::Expression::from($left),
crate::expression::Operator::try_from($op).unwrap(),
crate::expression::Expression::from($right),
))
};
}
pub(crate) use cst;
pub(crate) use cst_exp;
pub(crate) use fc;
pub(crate) use fc_exp;
pub(crate) use lambda;
pub(crate) use lit;
pub(crate) use node;
pub(crate) use var;