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