use crate::ast::{Constant, NamedDeBruijn, Term}; use super::{cost_model::ExBudget, Error}; pub struct EvalResult { result: Result, Error>, remaining_budget: ExBudget, initial_budget: ExBudget, logs: Vec, } impl EvalResult { pub fn new( result: Result, Error>, remaining_budget: ExBudget, initial_budget: ExBudget, logs: Vec, ) -> EvalResult { EvalResult { result, remaining_budget, initial_budget, logs, } } pub fn cost(&self) -> ExBudget { self.initial_budget - self.remaining_budget } pub fn logs(&mut self) -> Vec { std::mem::take(&mut self.logs) } pub fn failed(&self) -> bool { matches!(self.result, Err(_)) || matches!(self.result, Ok(Term::Error)) || matches!(self.result, Ok(Term::Constant(ref con)) if matches!(con.as_ref(), Constant::Bool(false))) } pub fn result(self) -> Result, Error> { self.result } }