use effectful::{
bound::{Bool, IsSend, IsSync},
effective::{Effective, Canonical},
environment::{Environment},
forward_send_sync,
};
use mockall::mock;
use treaty::{
any::{type_name, AnyTrait},
protocol::visitor::{RequestHint, Value, VisitResult},
protocol::DynWalker,
Flow,
};
mock! {
pub RequestHintVisitor<E: Environment> {
pub fn request_hint<'a, 'lt, 'ctx>(&mut self, walker: DynWalker<'a, 'lt, 'ctx, E>) -> VisitResult;
}
}
forward_send_sync!({} {} {E: (Environment + Send)} MockRequestHintVisitor<E>);
// any_trait! {
// impl['ctx][E] MockRequestHintVisitor<E> = [
// RequestHintProto<E>
// ] where
// E: Environment,
// }
impl<'ctx, E: Environment + Send> RequestHint<'ctx, E> for MockRequestHintVisitor<E> {
fn request_hint<'this: 'e, 'walker: 'e, 'lt: 'e, 'e>(
&'this mut self,
walker: DynWalker<'walker, 'lt, 'ctx, E>,
) -> Canonical<'e, VisitResult, E>
where
'ctx: 'this + 'walker,
{
E::value(self.request_hint(walker)).cast()
}
}