Diffstat (limited to 'src/macros/build.rs')
| -rw-r--r-- | src/macros/build.rs | 45 |
1 files changed, 24 insertions, 21 deletions
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>( |