Diffstat (limited to 'tests/common/protocol/recoverable.rs')
| -rw-r--r-- | tests/common/protocol/recoverable.rs | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/tests/common/protocol/recoverable.rs b/tests/common/protocol/recoverable.rs index 378e215..9f98afb 100644 --- a/tests/common/protocol/recoverable.rs +++ b/tests/common/protocol/recoverable.rs @@ -1,7 +1,12 @@ +use effectful::{ + blocking::Blocking as Block, + bound::{Bool, IsSend, IsSync}, + effective::Effective, + environment::{Environment, NativeForm}, +}; use mockall::mock; use treaty::{ any::{any_trait, TypeName}, - effect::{blocking::Blocking, Effect, Effective, ErasedEffective}, protocol::{ visitor::{ visit_recoverable, visit_sequence, DynRecoverableScope, DynSequenceScope, Recoverable, @@ -13,40 +18,48 @@ use treaty::{ Flow, Status, }; +use crate::common::Blocking; + mock! { pub RecoverableVisitor<E> { pub fn visit<'a, 'ctx>(&mut self, scope: DynRecoverableScope<'a, 'ctx, E>) -> VisitResult; } } +unsafe impl<E: Environment, F: Bool> IsSend<F> for MockRecoverableVisitor<E> {} +unsafe impl<E: Environment, F: Bool> IsSync<F> for MockRecoverableVisitor<E> {} + any_trait! { - impl['ctx, E] MockRecoverableVisitor<E> = [ + impl['ctx][E] MockRecoverableVisitor<E> = [ RecoverableProto<E> ] where - E: Effect, + E: Environment, } -impl<'ctx, E: Effect> Recoverable<'ctx, E> for MockRecoverableVisitor<E> { +impl<'ctx, E: Environment> Recoverable<'ctx, E> for MockRecoverableVisitor<E> { fn visit<'a>( &'a mut self, scope: DynRecoverableScope<'a, 'ctx, E>, - ) -> ErasedEffective<'a, VisitResult, E> { - E::ready(self.visit(scope)) + ) -> NativeForm<'a, VisitResult, E> { + E::value(self.visit(scope)).cast() } } mock! { - pub RecoverableScopeVisitor<E> { - pub fn new_walk<'a, 'b, 'ctx>(&'a mut self, visitor: DynVisitor<'b, 'ctx>) -> Status; + pub RecoverableScopeVisitor<E: Environment> { + pub fn new_walk<'a, 'b, 'ctx>(&'a mut self, visitor: DynVisitor<'b, 'ctx, E>) -> Status; } } -impl<'ctx, E: Effect> RecoverableScope<'ctx, E> for MockRecoverableScopeVisitor<E> { +unsafe impl<E: Environment, F: Bool> IsSend<F> for MockRecoverableScopeVisitor<E> {} +unsafe impl<E: Environment, F: Bool> IsSync<F> for MockRecoverableScopeVisitor<E> {} + +impl<'ctx, E: Environment> RecoverableScope<'ctx, E> for MockRecoverableScopeVisitor<E> { fn new_walk<'a: 'c, 'b: 'c, 'c>( &'a mut self, - visitor: DynVisitor<'b, 'ctx>, - ) -> ErasedEffective<'c, Status, E> { - E::ready(self.new_walk(visitor)) + visitor: DynVisitor<'b, 'ctx, E>, + ) -> NativeForm<'c, Status, E> { + E::value(self.new_walk(visitor)).cast() } } @@ -56,13 +69,13 @@ pub trait RecoverableVisitorExt<'ctx> { impl<'ctx, T> RecoverableVisitorExt<'ctx> for T where - T: AsVisitor<'ctx>, + T: AsVisitor<'ctx, Blocking>, { fn visit_recoverable_and_done<'a>( &'a mut self, scope: DynRecoverableScope<'a, 'ctx, Blocking>, ) { - let result = visit_recoverable(self.as_visitor(), scope).value(); + let result = visit_recoverable(self.as_visitor(), scope).into_value(); assert_eq!(result, VisitResult::Control(Flow::Done)); } |