Diffstat (limited to 'tests/common/walker.rs')
| -rw-r--r-- | tests/common/walker.rs | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/tests/common/walker.rs b/tests/common/walker.rs index 7956a98..7e90b7e 100644 --- a/tests/common/walker.rs +++ b/tests/common/walker.rs @@ -1,23 +1,36 @@ +use effectful::{ + effective::Effective, + bound::{Bool, IsSend, IsSync}, + environment::{Environment, NativeForm, DynBind}, +}; use mockall::mock; use treaty::{ any::{indirect, AnyTrait, AnyTraitObject, TypeNameId}, - effect::{Effect, Effective, ErasedEffective}, protocol::DynVisitor, Builder, BuilderTypes, Walker, }; mock! { - pub Walker<Output, Error> { - pub fn walk<'a, 'ctx>(self, visitor: DynVisitor<'a, 'ctx>) -> Result<Output, Error>; + pub Walker<Output, Error, E: Environment> { + pub fn walk<'a, 'ctx>(self, visitor: DynVisitor<'a, 'ctx, E>) -> Result<Output, Error>; - pub fn traits(&self, id: TypeNameId) -> &Option<Box<dyn for<'ctx> AnyTrait<'ctx> + Send + Sync>>; + pub fn traits(&self, id: TypeNameId) -> &Option<Box<dyn for<'ctx> AnyTrait<'ctx, E>>>; - pub fn traits_mut(&mut self, id: TypeNameId) -> &mut Option<Box<dyn for<'ctx> AnyTrait<'ctx> + Send + Sync>>; + pub fn traits_mut(&mut self, id: TypeNameId) -> &mut Option<Box<dyn for<'ctx> AnyTrait<'ctx, E>>>; } } -impl<'ctx, Output: Send + Sync, Error: Send + Sync + core::fmt::Debug, E: Effect> Walker<'ctx, E> - for MockWalker<Output, Error> +unsafe impl<Output, Error, E: Environment, F: Bool> IsSend<F> + for MockWalker<Output, Error, E> +{ +} +unsafe impl<Output, Error, E: Environment, F: Bool> IsSync<F> + for MockWalker<Output, Error, E> +{ +} + +impl<'ctx, Output: DynBind<E>, Error: DynBind<E> + core::fmt::Debug, E: Environment> + Walker<'ctx, E> for MockWalker<Output, Error, E> { type Error = Error; @@ -25,17 +38,20 @@ impl<'ctx, Output: Send + Sync, Error: Send + Sync + core::fmt::Debug, E: Effect fn walk<'a: 'c, 'c>( self, - visitor: DynVisitor<'a, 'ctx>, - ) -> ErasedEffective<'c, Result<Self::Output, Self::Error>, E> + visitor: DynVisitor<'a, 'ctx, E>, + ) -> NativeForm<'c, Result<Self::Output, Self::Error>, E> where Self: 'c, { - E::ready(self.walk(visitor)) + E::value(self.walk(visitor)).cast() } } -impl<'ctx, Output, Error> AnyTrait<'ctx> for MockWalker<Output, Error> { - fn upcast_to_id<'a>(&'a self, id: TypeNameId) -> Option<AnyTraitObject<'a, 'ctx, indirect::Ref>> +impl<'ctx, Output, Error, E: Environment> AnyTrait<'ctx, E> for MockWalker<Output, Error, E> { + fn upcast_to_id<'a>( + &'a self, + id: TypeNameId, + ) -> Option<AnyTraitObject<'a, 'ctx, indirect::Ref, E>> where 'ctx: 'a, { @@ -45,7 +61,7 @@ impl<'ctx, Output, Error> AnyTrait<'ctx> for MockWalker<Output, Error> { fn upcast_to_id_mut<'a>( &'a mut self, id: TypeNameId, - ) -> Option<AnyTraitObject<'a, 'ctx, indirect::Mut>> + ) -> Option<AnyTraitObject<'a, 'ctx, indirect::Mut, E>> where 'ctx: 'a, { |