@@ -828,6 +828,66 @@ where
828828 }
829829}
830830
831+ // Layered inspector
832+ impl < Db , Outer , Inner , TrevmState > Trevm < Db , Layered < Outer , Inner > , TrevmState >
833+ where
834+ Db : Database ,
835+ Outer : Inspector < Ctx < Db > > ,
836+ Inner : Inspector < Ctx < Db > > ,
837+ {
838+ /// Remove the outer-layer inspector, leaving the inner-layer inspector in
839+ /// place.
840+ pub fn take_outer ( self ) -> ( Outer , Trevm < Db , Inner , TrevmState > ) {
841+ let ( outer, inner) = self . inner . inspector . into_parts ( ) ;
842+
843+ (
844+ outer,
845+ Trevm {
846+ inner : Box :: new ( Evm {
847+ ctx : self . inner . ctx ,
848+ inspector : inner,
849+ instruction : self . inner . instruction ,
850+ precompiles : self . inner . precompiles ,
851+ frame_stack : self . inner . frame_stack ,
852+ } ) ,
853+ state : self . state ,
854+ } ,
855+ )
856+ }
857+
858+ /// Remove the outer-layer inspector, leaving the inner-layer inspector in
859+ /// place.
860+ pub fn remove_outer ( self ) -> Trevm < Db , Inner , TrevmState > {
861+ self . take_outer ( ) . 1
862+ }
863+
864+ /// Remove the inner-layer inspector, leaving the outer-layer inspector in
865+ /// place.
866+ pub fn take_inner ( self ) -> ( Inner , Trevm < Db , Outer , TrevmState > ) {
867+ let ( outer, inner) = self . inner . inspector . into_parts ( ) ;
868+
869+ (
870+ inner,
871+ Trevm {
872+ inner : Box :: new ( Evm {
873+ ctx : self . inner . ctx ,
874+ inspector : outer,
875+ instruction : self . inner . instruction ,
876+ precompiles : self . inner . precompiles ,
877+ frame_stack : self . inner . frame_stack ,
878+ } ) ,
879+ state : self . state ,
880+ } ,
881+ )
882+ }
883+
884+ /// Remove the inner-layer inspector, leaving the outer-layer inspector in
885+ /// place.
886+ pub fn remove_inner ( self ) -> Trevm < Db , Outer , TrevmState > {
887+ self . take_inner ( ) . 1
888+ }
889+ }
890+
831891// --- ALL STATES, WITH State<Db>
832892
833893impl < Db , Insp , TrevmState > Trevm < Db , Insp , TrevmState >
0 commit comments