use crate::{helpers::Ctx, EvmBundleDriverErrored, EvmNeedsTx};
use revm::{
context::result::EVMError, inspector::NoOpInspector, Database, DatabaseCommit, Inspector,
};
pub type DriveBundleResult<T, Db, Insp> =
Result<EvmNeedsTx<Db, Insp>, EvmBundleDriverErrored<T, Db, Insp>>;
pub trait BundleDriver<Db, Insp = NoOpInspector>
where
Db: Database + DatabaseCommit,
Insp: Inspector<Ctx<Db>>,
{
type Error: core::error::Error + From<EVMError<Db::Error>>;
fn run_bundle(&mut self, trevm: EvmNeedsTx<Db, Insp>) -> DriveBundleResult<Self, Db, Insp>;
fn post_bundle(&mut self, trevm: &EvmNeedsTx<Db, Insp>) -> Result<(), Self::Error>;
}