whereexpr 0.1.5

A fast, expressive rule-based filtering engine for Rust that evaluates boolean expressions over any data structure
Documentation
use crate::Operation;
use crate::Error;
use crate::ValueKind;

#[derive(Debug)]
pub(crate) struct Equal {
    value: bool,
}

impl Equal {
    pub(crate) fn new(value: bool) -> Self {
        Self { value }
    }
    pub(crate) fn evaluate(&self, value: bool) -> bool {
        self.value == value
    }
}

#[derive(Debug)]
pub(crate) enum BoolPredicate {
    Equal(Equal),
}

impl BoolPredicate {
    #[inline(always)]
    pub(crate) fn evaluate(&self, value: bool) -> bool {
        match self {
            BoolPredicate::Equal(predicate) => predicate.evaluate(value),
        }
    }
    pub(crate) fn with_value(operation: Operation, value: bool) -> Result<Self, Error> {
        match operation {
            Operation::Is => Ok(BoolPredicate::Equal(Equal::new(value))),
            _ => Err(Error::InvalidOperationForValue(operation, ValueKind::Bool)),
        }
    }
    pub(crate) fn with_str(operation: Operation, value: &str) -> Result<Self, Error> {
        match operation {
            Operation::Is => Ok(BoolPredicate::Equal(Equal::new(value.parse().map_err(|_| Error::FailToParseValue(value.to_string(), ValueKind::Bool))?))),
            _ => Err(Error::InvalidOperationForValue(operation, ValueKind::Bool)),
        }
    }
}