Diffstat (limited to 'tests/common/protocol/visitor.rs')
| -rw-r--r-- | tests/common/protocol/visitor.rs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/tests/common/protocol/visitor.rs b/tests/common/protocol/visitor.rs index a71e9ec..652f0b2 100644 --- a/tests/common/protocol/visitor.rs +++ b/tests/common/protocol/visitor.rs @@ -1,12 +1,17 @@ use mockall::mock; -use treaty::{any::{any_trait, TypeName, WithContextLt}, effect::{Effect, Future}, protocol::visitor::value::{DynValue, Value}, Flow}; +use treaty::{ + any::{any_trait, TypeName, WithContextLt}, + effect::{Effect, Future}, + protocol::visitor::{DynValue, Value, VisitResult}, + Flow, +}; mock! { pub ValueVisitor<T: for<'ctx> WithContextLt::MemberType<'ctx>, E> where for<'a, 'ctx> WithContextLt::T<'a, 'ctx, T>: Sized { - pub fn visit<'a, 'ctx>(&'a mut self, value: WithContextLt::T<'a, 'ctx, T>) -> Flow; + pub fn visit<'a, 'ctx>(&'a mut self, value: WithContextLt::T<'a, 'ctx, T>) -> VisitResult<()>; } } @@ -14,18 +19,27 @@ any_trait! { impl['ctx, T, E] MockValueVisitor<T, E> = [ DynValue<'ctx, T, E> ] where - T: for<'lt> TypeName::LowerType<'lt> + 'ctx, - for<'a, 'lt> WithContextLt::T<'a, 'lt, T>: Sized, + T: for<'lt> TypeName::LowerType<'lt> + Send + 'ctx, + for<'a, 'lt> WithContextLt::T<'a, 'lt, T>: Clone + Sized, E: Effect, } impl<'ctx, T: for<'lt> WithContextLt::MemberType<'lt>, E: Effect> Value<'ctx, T, E> for MockValueVisitor<T, E> where - for<'a, 'lt> WithContextLt::T<'a, 'lt, T>: Sized, + for<'a, 'lt> WithContextLt::T<'a, 'lt, T>: Sized + Clone, { - fn visit<'a>(&'a mut self, value: WithContextLt::T<'a, 'ctx, T>) -> Future<'a, Flow, E> - where 'ctx: 'a { - E::ready(self.visit(value)) + fn visit<'a>( + &'a mut self, + value: WithContextLt::T<'a, 'ctx, T>, + ) -> Future<'a, VisitResult<WithContextLt::T<'a, 'ctx, T>>, E> + where + WithContextLt::T<'a, 'ctx, T>: Send, + 'ctx: 'a, + { + E::ready(match self.visit(value.clone()) { + VisitResult::Skipped(_) => VisitResult::Skipped(value), + VisitResult::Control(flow) => VisitResult::Control(flow), + }) } } |