feat: json output for uplc eval

This commit is contained in:
rvcas
2023-03-08 01:10:56 -05:00
committed by KtorZ
parent bd7b8792bf
commit f8545854fc
4 changed files with 103 additions and 52 deletions

View File

@@ -0,0 +1,44 @@
use crate::ast::{Constant, NamedDeBruijn, Term};
use super::{cost_model::ExBudget, Error};
pub struct EvalResult {
result: Result<Term<NamedDeBruijn>, Error>,
remaining_budget: ExBudget,
initial_budget: ExBudget,
logs: Vec<String>,
}
impl EvalResult {
pub fn new(
result: Result<Term<NamedDeBruijn>, Error>,
remaining_budget: ExBudget,
initial_budget: ExBudget,
logs: Vec<String>,
) -> 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<String> {
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<Term<NamedDeBruijn>, Error> {
self.result
}
}