use std::rc::Rc; use crate::expressions::expression::Expression; use crate::expressions::operator::BinaryOperator; #[inline] pub fn and(left: L, right: R) -> Expression where L: Into>, R: Into>, { binary(left, BinaryOperator::And, right) } #[inline] pub fn or(left: L, right: R) -> Expression where L: Into>, R: Into>, { binary(left, BinaryOperator::Or, right) } #[inline] pub fn implies(left: L, right: R) -> Expression where L: Into>, R: Into>, { binary(left, BinaryOperator::Implication, right) } #[inline] pub fn binary(left: L, operator: BinaryOperator, right: R) -> Expression where L: Into>, R: Into>, { Expression::Binary { left: left.into(), operator, right: right.into() } } #[inline] pub fn not>>(value: T) -> Expression { Expression::Not(value.into()) } #[inline] pub fn atomic>(value: T) -> Expression { Expression::Atomic(value.into()) } // TODO eval function using nom parser