use mockall::mock;
use treaty::{
any::{any_trait, TypeName},
effect::{Effect, Effective, ErasedEffective},
protocol::visitor::{RequestHint, RequestHintProto, Value, ValueProto, VisitResult},
protocol::DynWalker,
Flow,
};
mock! {
pub RequestHintVisitor<E> {
pub fn request_hint<'a, 'ctx>(&mut self, walker: DynWalker<'a, 'ctx>) -> VisitResult;
}
}
any_trait! {
impl['ctx, E] MockRequestHintVisitor<E> = [
RequestHintProto<E>
] where
E: Effect,
}
impl<'ctx, E: Effect> RequestHint<'ctx, E> for MockRequestHintVisitor<E> {
fn request_hint<'this: 'e, 'walker: 'e, 'e>(
&'this mut self,
walker: DynWalker<'walker, 'ctx>,
) -> ErasedEffective<'e, VisitResult, E>
where
'ctx: 'this + 'walker,
{
E::ready(self.request_hint(walker))
}
}