Diffstat (limited to 'tests/common/protocol/tag.rs')
| -rw-r--r-- | tests/common/protocol/tag.rs | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/tests/common/protocol/tag.rs b/tests/common/protocol/tag.rs index db11438..9ce76f3 100644 --- a/tests/common/protocol/tag.rs +++ b/tests/common/protocol/tag.rs @@ -1,7 +1,11 @@ +use effectful::{ + bound::{Bool, IsSend, IsSync}, + effective::Effective, + environment::{Environment, NativeForm}, +}; use mockall::mock; use treaty::{ any::any_trait, - effect::{blocking::Blocking, Effect, Effective, ErasedEffective}, protocol::{ visitor::{visit_tag, Tag, TagConst, TagKind, TagProto, VisitResult}, AsVisitor, DynVisitor, @@ -9,27 +13,32 @@ use treaty::{ DynWalkerObjSafe, Flow, Walker, }; +use crate::common::Blocking; + mock! { - pub TagVisitor<K: TagKind, E> { + pub TagVisitor<K: TagKind<E>, E: Environment> { pub fn visit<'a, 'ctx>(&'a mut self, kind: K, walker: DynWalkerObjSafe<'a, 'ctx, E>) -> VisitResult; } } any_trait! { - impl['ctx, K, E] MockTagVisitor<K, E> = [ + impl['ctx, K][E] MockTagVisitor<K, E> = [ TagProto<K, E>, ] where - K: TagKind, - E: Effect, + K: TagKind<E>, + E: Environment, } -impl<'ctx, K: TagKind, E: Effect> Tag<'ctx, K, E> for MockTagVisitor<K, E> { +unsafe impl<K: TagKind<E>, E: Environment, F: Bool> IsSend<F> for MockTagVisitor<K, E> {} +unsafe impl<K: TagKind<E>, E: Environment, F: Bool> IsSync<F> for MockTagVisitor<K, E> {} + +impl<'ctx, K: TagKind<E>, E: Environment> Tag<'ctx, K, E> for MockTagVisitor<K, E> { fn visit<'a: 'c, 'b: 'c, 'c>( &'a mut self, kind: K, walker: DynWalkerObjSafe<'b, 'ctx, E>, - ) -> ErasedEffective<'c, VisitResult, E> { - E::ready(self.visit(kind, walker)) + ) -> NativeForm<'c, VisitResult, E> { + E::value(self.visit(kind, walker)).cast() } } @@ -39,11 +48,11 @@ pub trait TagVisitorExt<'ctx> { impl<'ctx, T> TagVisitorExt<'ctx> for T where - T: AsVisitor<'ctx>, + T: AsVisitor<'ctx, Blocking>, { fn visit_tag_and_done<'a, const TAG: u64, W: Walker<'ctx, Blocking>>(&'a mut self, walker: W) { let result = - visit_tag::<TagConst<TAG>, Blocking, _>(TagConst, self.as_visitor(), walker).value(); + visit_tag::<TagConst<TAG>, Blocking, _>(TagConst, self.as_visitor(), walker).into_value(); assert_eq!(result.unwrap(), VisitResult::Control(Flow::Done)); } |