use crate::{helpers::Ctx, Trevm};
use revm::{inspector::CountInspector, Database};
pub trait InspectorWithOutput<CTX>: revm::inspector::Inspector<CTX> {
type Output;
fn has_output(&self) -> bool;
fn reset_output(&mut self) {
self.take_output();
}
fn take_output(&mut self) -> Self::Output;
}
impl<Db: Database, Insp> Trevm<Db, Insp>
where
Insp: InspectorWithOutput<Ctx<Db>>,
{
pub fn take_output(&mut self) -> Insp::Output {
self.inspector_mut().take_output()
}
}
impl<Ctx> InspectorWithOutput<Ctx> for CountInspector {
type Output = Self;
fn has_output(&self) -> bool {
self.total_opcodes() > 0
}
fn reset_output(&mut self) {
self.clear();
}
fn take_output(&mut self) -> Self::Output {
std::mem::take(self)
}
}