Diffstat (limited to 'src/mock/protocol/value.rs')
| -rw-r--r-- | src/mock/protocol/value.rs | 38 |
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)) + } +} |