Diffstat (limited to 'src/build/builders/debug.rs')
| -rw-r--r-- | src/build/builders/debug.rs | 120 |
1 files changed, 63 insertions, 57 deletions
diff --git a/src/build/builders/debug.rs b/src/build/builders/debug.rs index 3bc9e94..c8f9324 100644 --- a/src/build/builders/debug.rs +++ b/src/build/builders/debug.rs @@ -8,9 +8,10 @@ use crate::{ protocol::{ self, visitor::{ - request_hint::RequestHint, - tag::{Dyn, Tag, DynTag}, - value::Value, sequence::{DynSequence, Sequence, SequenceFlow}, + request_hint::{DynRequestHint, RequestHint}, + sequence::{DynSequence, Sequence}, + tag::{Dyn, DynTag, Tag}, + value::{DynValue, Value}, }, }, DynWalker, Flow, @@ -20,17 +21,19 @@ pub struct Visitor<E>(usize, PhantomData<fn() -> E>); any_trait! { impl['a, 'ctx, E] Visitor<E> = [ - dyn RequestHint<'ctx, Effect = E> + 'a, + DynRequestHint<'a, 'ctx, E>, DynTag<'a, 'ctx, Dyn, E>, - dyn Value<'a, 'ctx, OwnedStatic<&'static str>, Effect = E> + 'a, - dyn Value<'a, 'ctx, OwnedStatic<TypeId>, Effect = E> + 'a, - dyn Value<'a, 'ctx, OwnedStatic<usize>, Effect = E> + 'a, + DynValue<'a, 'ctx, OwnedStatic<&'static str>, E>, + DynValue<'a, 'ctx, OwnedStatic<TypeId>, E>, + DynValue<'a, 'ctx, OwnedStatic<usize>, E>, + DynValue<'a, 'ctx, OwnedStatic<bool>, E>, + // DynValue<'a, 'ctx, OwnedStatic<&'static [&'static str]>, E>, DynSequence<'a, 'ctx, E>, ] else fallback where E: Effect<'ctx> } fn fallback(id: LtTypeId<'_>) { - println!("Unknown trait: {}", id); + // println!("Unknown trait: {}", id); } impl<'ctx, E: Effect<'ctx>> Visitor<E> { @@ -45,33 +48,23 @@ impl<'ctx, E: Effect<'ctx>> Visitor<E> { } } -impl<'ctx, E: Effect<'ctx>> RequestHint<'ctx> for Visitor<E> { - type Effect = E; - +impl<'ctx, E: Effect<'ctx>> RequestHint<'ctx, E> for Visitor<E> { fn request_hint<'a>( &'a mut self, _walker: crate::protocol::Walker<'a, 'ctx>, - ) -> Future<'a, 'ctx, ControlFlow<(), ()>, Self::Effect> - where - Self: 'a, - { + ) -> Future<'a, 'ctx, Flow, E> { self.tab(); println!("Visit request hint (no hint given)"); - E::wrap(async { ControlFlow::Continue(()) }) + E::ready(Flow::Continue) } } -impl<'ctx, E: Effect<'ctx>> Tag<'ctx, Dyn> for Visitor<E> { - type Effect = E; - +impl<'ctx, E: Effect<'ctx>> Tag<'ctx, Dyn, E> for Visitor<E> { fn visit<'a>( &'a mut self, kind: Dyn, - walker: DynWalker<'a, 'ctx, Self::Effect>, - ) -> Future<'a, 'ctx, Flow<Never>, Self::Effect> - where - Self: 'a, - { + walker: DynWalker<'a, 'ctx, E>, + ) -> Future<'a, 'ctx, Flow, E> { self.tab(); println!("Visit tag: {}", kind.0); @@ -79,86 +72,99 @@ impl<'ctx, E: Effect<'ctx>> Tag<'ctx, Dyn> for Visitor<E> { self.0 += 1; let result = walker.walk(self).await; self.0 -= 1; - match result { - ControlFlow::Continue(()) => Flow::Continue, - ControlFlow::Break(()) => Flow::Break, - } + result }) } } -impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<&'static str>> for Visitor<E> { - type Effect = E; - +impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<&'static str>, E> for Visitor<E> { fn visit( &'a mut self, OwnedStatic(value): OwnedStatic<&'static str>, - ) -> Future<'a, 'ctx, ControlFlow<(), ()>, Self::Effect> + ) -> Future<'a, 'ctx, Flow, E> where Self: 'a, { self.tab(); println!("Visit static str: {:?}", value); - E::wrap(async { ControlFlow::Continue(()) }) + E::ready(Flow::Continue) } } -impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<usize>> for Visitor<E> { - type Effect = E; - - fn visit( - &'a mut self, - OwnedStatic(value): OwnedStatic<usize>, - ) -> Future<'a, 'ctx, ControlFlow<(), ()>, Self::Effect> +impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<usize>, E> for Visitor<E> { + fn visit(&'a mut self, OwnedStatic(value): OwnedStatic<usize>) -> Future<'a, 'ctx, Flow, E> where Self: 'a, { self.tab(); println!("Visit usize: {}", value); - E::wrap(async { ControlFlow::Continue(()) }) + E::ready(Flow::Continue) } } -impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<TypeId>> for Visitor<E> { - type Effect = E; +impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<bool>, E> for Visitor<E> { + fn visit(&'a mut self, OwnedStatic(value): OwnedStatic<bool>) -> Future<'a, 'ctx, Flow, E> + where + Self: 'a, + { + self.tab(); + println!("Visit bool: {}", value); + E::ready(Flow::Continue) + } +} +impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<&'static [&'static str]>, E> + for Visitor<E> +{ fn visit( &'a mut self, - OwnedStatic(value): OwnedStatic<TypeId>, - ) -> Future<'a, 'ctx, ControlFlow<(), ()>, Self::Effect> + OwnedStatic(value): OwnedStatic<&'static [&'static str]>, + ) -> Future<'a, 'ctx, Flow, E> where Self: 'a, { self.tab(); - println!("Visit type ID: {:?}", value); - E::wrap(async { ControlFlow::Continue(()) }) + println!("Visit static slice of static str: {:?}", value); + E::ready(Flow::Continue) } } -impl<'ctx, E: Effect<'ctx>> Sequence<'ctx> for Visitor<E> { - type Effect = E; +impl<'a, 'ctx: 'a, E: Effect<'ctx>> Value<'a, 'ctx, OwnedStatic<TypeId>, E> for Visitor<E> { + fn visit(&'a mut self, OwnedStatic(value): OwnedStatic<TypeId>) -> Future<'a, 'ctx, Flow, E> + where + Self: 'a, + { + self.tab(); + println!("Visit type ID: {:?}", value); + E::ready(Flow::Continue) + } +} +impl<'ctx, E: Effect<'ctx>> Sequence<'ctx, E> for Visitor<E> { fn visit<'a>( &'a mut self, - scope: protocol::visitor::sequence::DynSequenceScope<'a, 'ctx, Self::Effect>, - ) -> Future<'a, 'ctx, Flow<Never>, Self::Effect> { + scope: protocol::visitor::sequence::DynSequenceScope<'a, 'ctx, E>, + ) -> Future<'a, 'ctx, Flow, E> { self.tab(); E::wrap(async { println!("Visit sequence, size hint: {:?}", scope.size_hint().await); self.0 += 1; + + let mut index = 0; let flow = loop { self.tab(); - println!("Calling next"); + println!("Calling next: {}", index); self.0 += 1; match scope.next(self).await { - SequenceFlow::Done => { + Flow::Done => { self.tab(); println!("Sequence done"); - break Flow::Continue - }, - SequenceFlow::Continue => {}, - SequenceFlow::Break => break Flow::Break, + break Flow::Continue; + } + Flow::Continue => {} + Flow::Break => break Flow::Break, } + index += 1; self.0 -= 1; }; self.0 -= 2; |