Diffstat (limited to 'src/walk/walkers/core/key_value.rs')
| -rw-r--r-- | src/walk/walkers/core/key_value.rs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/src/walk/walkers/core/key_value.rs b/src/walk/walkers/core/key_value.rs index 6469203..e1b38ac 100644 --- a/src/walk/walkers/core/key_value.rs +++ b/src/walk/walkers/core/key_value.rs @@ -1,4 +1,8 @@ -use effectful::{environment::{Environment, NativeForm}, forward_send_sync}; +use effectful::{ + effective::Effective, + environment::{Environment, NativeForm}, + forward_send_sync, +}; use crate::{ never::Never, @@ -63,32 +67,26 @@ where _tag, } = self; - E::as_ctx( - visitor, - #[inline(always)] - |visitor| { + E::value(visitor) + .update(key_walker, |key_walker, visitor| { visit_tag::<tags::Key, E, _>(TagConst, visitor.cast(), key_walker) - .map(|result| match result { + .map((), |_, result| match result { Ok(visit) => visit.unit_skipped(), Err(_) => Flow::Err.into(), }) .cast() - }, - ) - .if_not_finished( - #[inline(always)] - |visitor| { + }) + .if_not_finished(value_walker, |value_walker, visitor| { value_walker .walk(visitor.cast()) - .map(|result| match result { + .map((), |_, result| match result { Ok(_) => Flow::Done.into(), Err(_err) => Flow::Err.into(), }) .cast() - }, - ) - .remove_ctx() - .map(|_| Ok(())) + }) + .map((), |_, _| Ok(())) + .cast() // E::wrap(async move { // match visit_tag::<T, E, _>(self.tag, visitor.cast(), NoopWalker::new()).await { |