#[path = "interpreter/access.rs"]
mod access;
#[path = "interpreter/attributes.rs"]
mod attributes;
#[path = "interpreter/error.rs"]
mod error;
#[path = "interpreter/eval.rs"]
mod eval;
#[path = "interpreter/literals.rs"]
mod literals;
#[path = "interpreter/quantifiers.rs"]
mod quantifiers;
pub use error::ConditionEvalError;
use crate::languages::azure_rbac::ast::{ConditionExpr, ConditionExpression, EvaluationContext};
use crate::value::Value;
use eval::Evaluator;
#[derive(Debug, Clone)]
pub struct ConditionInterpreter<'a> {
context: &'a EvaluationContext,
}
impl<'a> ConditionInterpreter<'a> {
pub const fn new(context: &'a EvaluationContext) -> Self {
Self { context }
}
pub fn evaluate_str(&self, condition: &str) -> Result<bool, ConditionEvalError> {
let mut evaluator = Evaluator::new(self.context);
evaluator.evaluate_str(condition)
}
pub fn evaluate_condition_expression(
&self,
condition: &ConditionExpression,
) -> Result<bool, ConditionEvalError> {
let mut evaluator = Evaluator::new(self.context);
evaluator.evaluate_condition_expression(condition)
}
pub fn evaluate_bool(&self, expr: &ConditionExpr) -> Result<bool, ConditionEvalError> {
let mut evaluator = Evaluator::new(self.context);
evaluator.evaluate_bool(expr)
}
pub fn evaluate_value(&self, expr: &ConditionExpr) -> Result<Value, ConditionEvalError> {
let mut evaluator = Evaluator::new(self.context);
evaluator.evaluate_value(expr)
}
}