Diffstat (limited to 'src/walk/walkers/core/key_value.rs')
-rw-r--r--src/walk/walkers/core/key_value.rs113
1 files changed, 58 insertions, 55 deletions
diff --git a/src/walk/walkers/core/key_value.rs b/src/walk/walkers/core/key_value.rs
index 8e14a1c..987d3bf 100644
--- a/src/walk/walkers/core/key_value.rs
+++ b/src/walk/walkers/core/key_value.rs
@@ -1,5 +1,5 @@
use crate::{
- effect::{Effect, Future},
+ effect::{Effect, ObjSafe},
never::Never,
protocol::{
visitor::{visit_tag, TagConst, TagError, TagKind, VisitResult},
@@ -16,6 +16,7 @@ pub struct KeyValueWalker<T, K, V> {
}
impl<T, K, V> KeyValueWalker<T, K, V> {
+ #[inline(always)]
pub fn new(tag: T, key_walker: K, value_walker: V) -> Self {
Self {
key_walker,
@@ -53,65 +54,67 @@ where
K: crate::Walker<'ctx, E>,
V: crate::Walker<'ctx, E>,
{
+ #[inline(always)]
fn walk<'a>(
self,
mut visitor: DynVisitor<'a, 'ctx>,
- ) -> Future<'a, Result<Self::Output, Self::Error>, E>
+ ) -> ObjSafe<'a, Result<Self::Output, Self::Error>, E>
where
Self: 'a,
{
- E::wrap(async move {
- match visit_tag::<T, E, _>(self.tag, visitor.cast(), NoopWalker::new()).await {
- Ok(VisitResult::Skipped(_)) => {
- match visit_tag::<TagConst<{ TAG_KEY_VALUE.to_int() }>, E, _>(
- TagConst,
- visitor.cast(),
- NoopWalker::new(),
- )
- .await
- {
- Ok(VisitResult::Skipped(_) | VisitResult::Control(Flow::Continue)) => {}
- Ok(VisitResult::Control(_flow)) => return Ok(()),
- Err(_) => todo!(),
- }
- }
- Ok(VisitResult::Control(Flow::Continue)) => {}
- Ok(VisitResult::Control(_flow)) => todo!(),
- Err(_) => todo!(),
- }
-
- match visit_tag::<TagConst<{ TAG_KEY.to_int() }>, E, _>(
- TagConst,
- visitor.cast(),
- self.key_walker,
- )
- .await
- {
- Ok(VisitResult::Skipped(_) | VisitResult::Control(Flow::Continue)) => {}
- Ok(VisitResult::Control(_flow)) => return Ok(()),
- Err(_) => todo!(),
- }
-
- match visit_tag::<TagConst<{ TAG_VALUE.to_int() }>, E, _>(
- TagConst,
- visitor.cast(),
- self.value_walker,
- )
- .await
- {
- Ok(VisitResult::Control(Flow::Continue)) => {}
- Ok(VisitResult::Skipped(value_walker)) => {
- // Fallback to just walking the value.
- match value_walker.walk(visitor).await {
- Ok(_) => {}
- Err(_err) => todo!(),
- }
- }
- Ok(VisitResult::Control(_flow)) => todo!(),
- Err(_) => todo!(),
- }
-
- Ok(())
- })
+ todo!()
+ // E::wrap(async move {
+ // match visit_tag::<T, E, _>(self.tag, visitor.cast(), NoopWalker::new()).await {
+ // Ok(VisitResult::Skipped(_)) => {
+ // match visit_tag::<TagConst<{ TAG_KEY_VALUE.to_int() }>, E, _>(
+ // TagConst,
+ // visitor.cast(),
+ // NoopWalker::new(),
+ // )
+ // .await
+ // {
+ // Ok(VisitResult::Skipped(_) | VisitResult::Control(Flow::Continue)) => {}
+ // Ok(VisitResult::Control(_flow)) => return Ok(()),
+ // Err(_) => todo!(),
+ // }
+ // }
+ // Ok(VisitResult::Control(Flow::Continue)) => {}
+ // Ok(VisitResult::Control(_flow)) => todo!(),
+ // Err(_) => todo!(),
+ // }
+ //
+ // match visit_tag::<TagConst<{ TAG_KEY.to_int() }>, E, _>(
+ // TagConst,
+ // visitor.cast(),
+ // self.key_walker,
+ // )
+ // .await
+ // {
+ // Ok(VisitResult::Skipped(_) | VisitResult::Control(Flow::Continue)) => {}
+ // Ok(VisitResult::Control(_flow)) => return Ok(()),
+ // Err(_) => todo!(),
+ // }
+ //
+ // match visit_tag::<TagConst<{ TAG_VALUE.to_int() }>, E, _>(
+ // TagConst,
+ // visitor.cast(),
+ // self.value_walker,
+ // )
+ // .await
+ // {
+ // Ok(VisitResult::Control(Flow::Continue)) => {}
+ // Ok(VisitResult::Skipped(value_walker)) => {
+ // // Fallback to just walking the value.
+ // match value_walker.walk(visitor).await {
+ // Ok(_) => {}
+ // Err(_err) => todo!(),
+ // }
+ // }
+ // Ok(VisitResult::Control(_flow)) => todo!(),
+ // Err(_) => todo!(),
+ // }
+ //
+ // Ok(())
+ // })
}
}