Diffstat (limited to 'tests/common/builder.rs')
-rw-r--r--tests/common/builder.rs73
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,
{