use crate::core::eval::{eval, eval_lenient};
use crate::core::Expr;
use crate::error::Result;
use crate::template::TModel;
pub struct DefaultToExpression {
pub target: Expr,
pub default: Option<Expr>,
}
impl DefaultToExpression {
pub fn new(target: Expr, default: Option<Expr>) -> Self {
DefaultToExpression { target, default }
}
pub(crate) fn eval(&self, env: &mut crate::core::Environment) -> Result<TModel> {
let m = eval_lenient(env, &self.target)?;
if !m.is_nothing() {
return Ok(m);
}
match &self.default {
Some(d) => eval(env, d),
None => Ok(TModel::from_scalar(String::new())),
}
}
}