Diffstat (limited to 'tests/common/protocol/tag.rs')
| -rw-r--r-- | tests/common/protocol/tag.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/common/protocol/tag.rs b/tests/common/protocol/tag.rs new file mode 100644 index 0000000..23916d1 --- /dev/null +++ b/tests/common/protocol/tag.rs @@ -0,0 +1,26 @@ +use mockall::mock; +use treaty::{any::any_trait, effect::{Effect, Future}, protocol::visitor::tag::{DynTag, Tag, TagKind}, DynWalker}; + +mock! { + pub TagVisitor<K: TagKind, E> { + pub fn visit<'a, 'ctx>(&'a mut self, kind: K, walker: DynWalker<'a, 'ctx, E>) -> K::Flow; + } +} + +any_trait! { + impl['ctx, K, E] MockTagVisitor<K, E> = [ + DynTag<'ctx, K, E>, + ] where + K: TagKind, + E: Effect, +} + +impl<'ctx, K: TagKind, E: Effect> Tag<'ctx, K, E> for MockTagVisitor<K, E> { + fn visit<'a>( + &'a mut self, + kind: K, + walker: DynWalker<'a, 'ctx, E>, + ) -> Future<'a, <K as TagKind>::Flow, E> { + E::ready(self.visit(kind, walker)) + } +} |