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