Diffstat (limited to 'src/walk/walkers/core/key_value.rs')
-rw-r--r--src/walk/walkers/core/key_value.rs30
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 {