Diffstat (limited to 'src/walk.rs')
| -rw-r--r-- | src/walk.rs | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/src/walk.rs b/src/walk.rs index 9f4a828..9c6cd10 100644 --- a/src/walk.rs +++ b/src/walk.rs @@ -1,7 +1,7 @@ pub mod walkers; use crate::{ - effect::{all_ctx, merge_ctx, Effect, Effective, ErasedEffective}, + effect::{Effect, Effective, EffectiveExt, ErasedEffective}, protocol::DynVisitor, Flow, }; @@ -121,34 +121,29 @@ impl<'ctx, W: Walker<'ctx, E>, E: Effect> WalkerObjSafe<'ctx, E> for DynWalkerAd core::mem::replace(&mut self.state, DynWalkerState::Walking) { E::ready((self, visitor)) - .as_ctx( - all_ctx, - |(this, visitor), _| { - // Walk the walker. - walker - .walk(visitor.cast()) - .map(|value| match value { - Ok(value) => { - this.state = DynWalkerState::Done(value); - Flow::Done - } - Err(err) => { - this.state = DynWalkerState::Err(err); - - // Signal that control flow should stop as soon as possible as we - // are in an error state. - Flow::Err - } - }) - .into_erased() - }, - merge_ctx, - ) + .as_ctx(|(this, visitor)| { + // Walk the walker. + walker + .walk(visitor.cast()) + .map(|value| match value { + Ok(value) => { + this.state = DynWalkerState::Done(value); + Flow::Done + } + Err(err) => { + this.state = DynWalkerState::Err(err); + + // Signal that control flow should stop as soon as possible as we + // are in an error state. + Flow::Err + } + }) + .cast() + }) .map(|(_, value)| value) - .into_erased() } else { // Can't do anything if the walker has already been walked. - E::ready(Flow::Done).into_erased() + E::ready(Flow::Done) } } } |