Diffstat (limited to 'tests/common/protocol/tag.rs')
-rw-r--r--tests/common/protocol/tag.rs26
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))
+ }
+}