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