| -rw-r--r-- | src/build/builders/core/bool.rs | 14 | ||||
| -rw-r--r-- | src/macros/build.rs | 45 | ||||
| -rw-r--r-- | tests/builder_struct.rs | 2 |
3 files changed, 26 insertions, 35 deletions
diff --git a/src/build/builders/core/bool.rs b/src/build/builders/core/bool.rs index 5001ba6..8596fbb 100644 --- a/src/build/builders/core/bool.rs +++ b/src/build/builders/core/bool.rs @@ -4,23 +4,13 @@ use crate::any::{ }; use effectful::bound::{Dynamic, IsSync}; use effectful::environment::{DynBind, Environment}; +use crate::Builder; macro_rules! value_builder { [$($ty:ty),*] => { $(impl<'ctx, M, E: Environment> crate::Build<'ctx, M, E> for $ty where - Dynamic<Self>: DynBind<E>, - for<'a> Dynamic<&'a Self>: DynBind<E>, - Dynamic<OwnedStatic<Self>>: DynBind<E>, - for<'a> Dynamic<&'a OwnedStatic<Self>>: DynBind<E>, - Dynamic<BorrowedStatic<'ctx, Self>>: DynBind<E>, - for<'a, 'b> Dynamic<&'a BorrowedStatic<'b, Self>>: DynBind<E>, - for<'a> Dynamic<TempBorrowedStatic<'a, Self>>: DynBind<E>, - for<'a> Dynamic<&'a TempBorrowedStatic<'a, Self>>: DynBind<E>, - Dynamic<BorrowedMutStatic<'ctx, Self>>: DynBind<E>, - for<'a, 'b> Dynamic<&'a BorrowedMutStatic<'b, Self>>: DynBind<E>, - for<'a> Dynamic<TempBorrowedMutStatic<'a, Self>>: DynBind<E>, - for<'a> Dynamic<&'a TempBorrowedMutStatic<'a, Self>>: DynBind<E>, + ValueBuilder<$ty, Cloneable, E>: Builder<'ctx, E, Value = Self>, { type Builder = ValueBuilder<$ty, Cloneable, E>; })* diff --git a/src/macros/build.rs b/src/macros/build.rs index 4272bed..a0ad6ab 100644 --- a/src/macros/build.rs +++ b/src/macros/build.rs @@ -100,32 +100,35 @@ macro_rules! Build { fn new_builders<'a>(seed: Self::Seed) -> effectful::environment::NativeForm<'a, Self::Builders, E> { let ($($field),*) = seed; - todo!() - - // $crate::effect::join( - // ($(<<$type as $crate::Build<'ctx, M, E>>::Builder as $crate::Builder::<E>>::from_seed($field),)*) - // ).map(|($($field,)*)| { - // Builders { - // $($field),* - // } - // }) + use effectful::effective::Effective; + + effectful::effective::join( + ($(<<$type as $crate::Build<'ctx, M, E>>::Builder as $crate::Builder::<E>>::from_seed($field),)*) + ).map((), |_, ($($field,)*)| { + Builders { + $($field),* + } + }) + .cast() } fn from_builders<'a>(builders: Self::Builders) -> effectful::environment::NativeForm<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> { use $crate::Builder; - todo!() - - // $crate::effect::try_join( - // ( - // $(|| builders.$field.build().map(|x| x.map_err(Error::$field)),)* - // ) - // ).map(|result| match result { - // Ok(($($field,)*)) => Ok($name { - // $($field),* - // }), - // Err(err) => Err(err) - // }) + use effectful::effective::Effective; + use $crate::BuilderTypes; + + effectful::effective::try_join( + ( + $(builders.$field.build().map((), |_, x| x.map(|x| <<$type as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::unwrap_output(x)).map_err(Error::$field)),)* + ) + ).map((), |_, result| match result { + Ok(($($field,)*)) => Ok(effectful::bound::Dynamic($name { + $($field),* + })), + Err(err) => Err(err) + }) + .cast() } fn as_visitor<'a>( diff --git a/tests/builder_struct.rs b/tests/builder_struct.rs index 1a8ec6f..1149b9b 100644 --- a/tests/builder_struct.rs +++ b/tests/builder_struct.rs @@ -1,4 +1,3 @@ -/* use effectful::SendSync; use macro_rules_attribute::derive; use treaty::{ @@ -149,4 +148,3 @@ fn a_struct_builder_can_build_from_a_sequence_of_keyed_values() { // The struct is built as the mock walker above makes it. assert_eq!(builder.build().into_value().unwrap().0, X { a: false, b: true }); } -*/ |