use cedar_policy_core::{
ast::{Name, RestrictedExpr, Value},
evaluator::{EvaluationError, RestrictedEvaluator},
extensions::Extensions,
};
use smol_str::SmolStr;
use crate::extension_schema::ExtensionSchema;
#[cfg(feature = "ipaddr")]
pub mod ipaddr;
#[cfg(feature = "decimal")]
pub mod decimal;
pub mod partial_evaluation;
pub fn all_available_extension_schemas() -> Vec<ExtensionSchema> {
vec![
#[cfg(feature = "ipaddr")]
ipaddr::extension_schema(),
#[cfg(feature = "decimal")]
decimal::extension_schema(),
#[cfg(feature = "partial-eval")]
partial_evaluation::extension_schema(),
]
}
fn eval_extension_constructor(
constructor_name: Name,
lit_str_arg: SmolStr,
) -> Result<Value, EvaluationError> {
let exts = Extensions::all_available();
let evaluator = RestrictedEvaluator::new(&exts);
let constructor_call_expr =
RestrictedExpr::call_extension_fn(constructor_name, [RestrictedExpr::val(lit_str_arg)]);
evaluator.interpret(constructor_call_expr.as_borrowed())
}