Diffstat (limited to 'src/walk/walkers/core/key_value.rs')
| -rw-r--r-- | src/walk/walkers/core/key_value.rs | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/src/walk/walkers/core/key_value.rs b/src/walk/walkers/core/key_value.rs index 3ac5b6b..6eb2210 100644 --- a/src/walk/walkers/core/key_value.rs +++ b/src/walk/walkers/core/key_value.rs @@ -1,4 +1,16 @@ -use crate::{never::Never, WalkerTypes, effect::{Effect, Future}, protocol::{Visitor, visitor::{tag::{visit_tag, TagKind, TagConst, TagError}, Status}}, walkers::core::noop::NoopWalker, TAG_KEY_VALUE, Flow, TAG_KEY, TAG_VALUE}; +use crate::{ + effect::{Effect, Future}, + never::Never, + protocol::{ + visitor::{ + tag::{visit_tag, TagConst, TagError, TagKind}, + Status, + }, + Visitor, + }, + walkers::core::noop::NoopWalker, + Flow, WalkerTypes, TAG_KEY, TAG_KEY_VALUE, TAG_VALUE, +}; pub struct KeyValueWalker<T, K, V> { key_walker: K, @@ -26,7 +38,7 @@ enum KeyValueErrorKind<K, V> { #[derive(Debug)] pub struct KeyValueError<K, V>(KeyValueErrorKind<K, V>); -impl<T, K, V> WalkerTypes for KeyValueWalker<T, K, V> +impl<T, K, V> WalkerTypes for KeyValueWalker<T, K, V> where K: WalkerTypes, V: WalkerTypes, @@ -36,7 +48,7 @@ where type Output = (); } -impl<'ctx, T, K, V, E> crate::Walker<'ctx, E> for KeyValueWalker<T, K, V> +impl<'ctx, T, K, V, E> crate::Walker<'ctx, E> for KeyValueWalker<T, K, V> where E: Effect<'ctx>, T: TagKind, @@ -48,40 +60,55 @@ where visitor: Visitor<'a, 'ctx>, ) -> Future<'a, 'ctx, Result<Self::Output, Self::Error>, E> where - Self: 'a + Self: 'a, { E::wrap(async move { match visit_tag::<T, E, _>(self.tag, visitor, NoopWalker::new()).await { Ok(Status::Skipped(_)) => { - match visit_tag::<TagConst<{ TAG_KEY_VALUE.to_int() }>, E, _>(TagConst, visitor, NoopWalker::new()).await + match visit_tag::<TagConst<{ TAG_KEY_VALUE.to_int() }>, E, _>( + TagConst, + visitor, + NoopWalker::new(), + ) + .await { - Ok(Status::Skipped(_) | Status::Flow(Flow::Continue)) => {}, + Ok(Status::Skipped(_) | Status::Flow(Flow::Continue)) => {} Ok(Status::Flow(flow)) => return Ok(()), Err(_) => todo!(), } } - Ok(Status::Flow(Flow::Continue)) => {}, + Ok(Status::Flow(Flow::Continue)) => {} Ok(Status::Flow(flow)) => todo!(), Err(_) => todo!(), } - match visit_tag::<TagConst<{ TAG_KEY.to_int() }>, E, _>(TagConst, visitor, self.key_walker).await + match visit_tag::<TagConst<{ TAG_KEY.to_int() }>, E, _>( + TagConst, + visitor, + self.key_walker, + ) + .await { - Ok(Status::Skipped(_) | Status::Flow(Flow::Continue)) => {}, + Ok(Status::Skipped(_) | Status::Flow(Flow::Continue)) => {} Ok(Status::Flow(flow)) => return Ok(()), Err(_) => todo!(), } - match visit_tag::<TagConst<{ TAG_VALUE.to_int() }>, E, _>(TagConst, visitor, self.value_walker).await + match visit_tag::<TagConst<{ TAG_VALUE.to_int() }>, E, _>( + TagConst, + visitor, + self.value_walker, + ) + .await { - Ok(Status::Flow(Flow::Continue)) => {}, + Ok(Status::Flow(Flow::Continue)) => {} Ok(Status::Skipped(value_walker)) => { // Fallback to just walking the value. match value_walker.walk(visitor).await { - Ok(_) => {}, + Ok(_) => {} Err(err) => todo!(), } - }, + } Ok(Status::Flow(flow)) => todo!(), Err(_) => todo!(), } |