cel 0.11.0

A parser and interpreter for the Common Expression Language (CEL)
Documentation
use crate::common::types::Type;
use crate::common::value::Val;
use std::any::Any;

pub struct Optional(Option<Box<dyn Val>>);

const OPTIONAL_TYPE: Type = Type::new_opaque_type("optional_type");

impl Val for Optional {
    fn get_type(&self) -> Type {
        OPTIONAL_TYPE
    }

    fn into_inner(self) -> Box<dyn Any> {
        match self.0 {
            None => Box::new(None::<()>),
            Some(v) => Box::new(Some(v)),
        }
    }
}

impl From<Option<Box<dyn Val>>> for Optional {
    fn from(val: Option<Box<dyn Val>>) -> Self {
        Optional(val)
    }
}

impl From<Optional> for Option<Box<dyn Val>> {
    fn from(val: Optional) -> Option<Box<dyn Val>> {
        val.0
    }
}