Diffstat (limited to 'src/mock/protocol/value.rs')
-rw-r--r--src/mock/protocol/value.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/mock/protocol/value.rs b/src/mock/protocol/value.rs
new file mode 100644
index 0000000..99ba045
--- /dev/null
+++ b/src/mock/protocol/value.rs
@@ -0,0 +1,38 @@
+use mockall::mock;
+
+use crate::{
+ any::{MaybeSized, TypeName},
+ any_trait,
+ effect::{Effect, Future},
+ protocol::visitor::value::{DynValue, Value},
+ Flow,
+};
+
+mock! {
+ pub ValueVisitor<T: for<'ctx> MaybeSized::Trait<'ctx>, E>
+ where
+ for<'a, 'ctx> MaybeSized::T<'a, 'ctx, T>: Sized
+ {
+ pub fn visit<'a, 'ctx>(&'a mut self, value: MaybeSized::T<'a, 'ctx, T>) -> Flow;
+ }
+}
+
+any_trait! {
+ impl['ctx, T, E] MockValueVisitor<T, E> = [
+ DynValue<'ctx, T, E>
+ ] where
+ T: for<'lt> TypeName::Member<'lt> + 'ctx,
+ for<'a, 'lt> MaybeSized::T<'a, 'lt, T>: Sized,
+ E: Effect<'ctx>,
+}
+
+impl<'ctx, T: for<'lt> MaybeSized::Trait<'lt>, E: Effect<'ctx>> Value<'ctx, T, E>
+ for MockValueVisitor<T, E>
+where
+ for<'a, 'lt> MaybeSized::T<'a, 'lt, T>: Sized,
+{
+ #[track_caller]
+ fn visit<'a>(&'a mut self, value: MaybeSized::T<'a, 'ctx, T>) -> Future<'a, 'ctx, Flow, E> {
+ E::ready(self.visit(value))
+ }
+}