use crate::{
evm::{CallTrace, Trace},
tracing::Tracing,
Weight,
};
use sp_core::U256;
mod call_tracing;
pub use call_tracing::*;
#[derive(derive_more::From, Debug)]
pub enum Tracer {
CallTracer(CallTracer<U256, fn(Weight) -> U256>),
}
impl Tracer {
pub fn empty_trace(&self) -> Trace {
match self {
Tracer::CallTracer(_) => CallTrace::default().into(),
}
}
pub fn as_tracing(&mut self) -> &mut (dyn Tracing + 'static) {
match self {
Tracer::CallTracer(inner) => inner as &mut dyn Tracing,
}
}
pub fn collect_trace(&mut self) -> Option<Trace> {
match self {
Tracer::CallTracer(inner) => inner.collect_trace().map(Trace::Call),
}
}
}