Diffstat (limited to 'tests/common/builder.rs')
| -rw-r--r-- | tests/common/builder.rs | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/tests/common/builder.rs b/tests/common/builder.rs index 74b78cd..64d77f9 100644 --- a/tests/common/builder.rs +++ b/tests/common/builder.rs @@ -1,8 +1,13 @@ use core::fmt::{Debug, Display}; +use effectful::{ + bound::{Bool, IsSend, IsSync}, + environment::{DynBind, Environment, NativeForm}, + effective::Effective, + forward_send_sync, +}; use mockall::mock; use treaty::{ any::{indirect, AnyTrait, AnyTraitObject, TypeNameId}, - effect::{Effect, Effective, ErasedEffective}, protocol::{AsVisitor, DynVisitor}, Builder, BuilderTypes, }; @@ -23,17 +28,32 @@ impl Display for EmptyError { } mock! { - pub Builder<Seed: 'static, Value: 'static, Error: 'static> { + pub Builder<Seed: 'static, Value: 'static, Error: 'static, E: Environment> { pub fn from_seed(seed: Seed) -> Self; pub fn build(self) -> Result<Value, Error>; - pub fn traits(&self, id: TypeNameId) -> &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> + 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, E>>>; } } -impl<Seed: Send + Sync, Value: Send + Sync, Error: Send + Sync + Display + Debug> BuilderTypes - for MockBuilder<Seed, Value, Error> +// forward_send_sync!({Seed: ('static), Value: ('static), Error: ('static)} {} {E: (Environment)} MockBuilder<Seed, Value, Error, E>); + +unsafe impl<Seed: 'static, Value: 'static, Error: 'static, E: Environment, F: Bool> IsSend<F> + for MockBuilder<Seed, Value, Error, E> +{ +} +unsafe impl<Seed: 'static, Value: 'static, Error: 'static, E: Environment, F: Bool> IsSync<F> + for MockBuilder<Seed, Value, Error, E> +{ +} + +impl<Seed, Value, Error: Display + Debug, E: Environment> BuilderTypes<E> + for MockBuilder<Seed, Value, Error, E> +where + Seed: DynBind<E>, + Value: DynBind<E>, + Error: DynBind<E>, { type Seed = Seed; @@ -42,8 +62,10 @@ impl<Seed: Send + Sync, Value: Send + Sync, Error: Send + Sync + Display + Debug type Value = Value; } -impl<Seed: 'static, Value: 'static, Error: 'static> MockBuilder<Seed, Value, Error> { - pub fn lock_from_seed_context<'a>() -> ContextGuard<'a, Context<Seed, Value, Error>> { +impl<Seed: 'static, Value: 'static, Error: 'static, E: Environment> + MockBuilder<Seed, Value, Error, E> +{ + pub fn lock_from_seed_context<'a>() -> ContextGuard<'a, Context<Seed, Value, Error, E>> { static LOCKS: StaticTypeMap = StaticTypeMap::new(); LOCKS @@ -58,31 +80,31 @@ impl<Seed: 'static, Value: 'static, Error: 'static> MockBuilder<Seed, Value, Err impl< 'ctx, - Seed: Send + Sync, - Value: Send + Sync, - Error: Send + Sync + Display + Debug, - E: Effect, - > Builder<'ctx, E> for MockBuilder<Seed, Value, Error> + Seed: DynBind<E>, + Value: DynBind<E>, + Error: DynBind<E> + Display + Debug, + E: Environment, + > Builder<'ctx, E> for MockBuilder<Seed, Value, Error, E> { - fn from_seed<'a>(seed: Self::Seed) -> ErasedEffective<'a, Self, E> + fn from_seed<'a>(seed: Self::Seed) -> NativeForm<'a, Self, E> where Self: 'a, { - E::ready(Self::from_seed(seed)) + E::value(Self::from_seed(seed)).cast() } - fn build<'a>(self) -> ErasedEffective<'a, Result<Self::Value, Self::Error>, E> + fn build<'a>(self) -> NativeForm<'a, Result<Self::Value, Self::Error>, E> where Self: 'a, { - E::ready(self.build()) + E::value(self.build()).cast() } } -impl<'ctx, Seed: Send + Sync, Value: Send + Sync, Error: Send + Sync + Display + Debug> - AsVisitor<'ctx> for MockBuilder<Seed, Value, Error> +impl<'ctx, Seed, Value, Error: Display + Debug, E: Environment> AsVisitor<'ctx, E> + for MockBuilder<Seed, Value, Error, E> { - fn as_visitor<'a>(&'a mut self) -> DynVisitor<'a, 'ctx> + fn as_visitor<'a>(&'a mut self) -> DynVisitor<'a, 'ctx, E> where 'ctx: 'a, { @@ -90,8 +112,13 @@ impl<'ctx, Seed: Send + Sync, Value: Send + Sync, Error: Send + Sync + Display + } } -impl<'ctx, Seed, Value, Error> AnyTrait<'ctx> for MockBuilder<Seed, Value, Error> { - fn upcast_to_id<'a>(&'a self, id: TypeNameId) -> Option<AnyTraitObject<'a, 'ctx, indirect::Ref>> +impl<'ctx, Seed, Value, Error, E: Environment> AnyTrait<'ctx, E> + for MockBuilder<Seed, Value, Error, E> +{ + fn upcast_to_id<'a>( + &'a self, + id: TypeNameId, + ) -> Option<AnyTraitObject<'a, 'ctx, indirect::Ref, E>> where 'ctx: 'a, { @@ -102,7 +129,7 @@ impl<'ctx, Seed, Value, Error> AnyTrait<'ctx> for MockBuilder<Seed, Value, 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, { |