feat: json output for uplc eval
This commit is contained in:
44
crates/uplc/src/machine/eval_result.rs
Normal file
44
crates/uplc/src/machine/eval_result.rs
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user