Diffstat (limited to 'src/walk.rs')
-rw-r--r--src/walk.rs47
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)
}
}
}