Diffstat (limited to 'src/macros/build.rs')
| -rw-r--r-- | src/macros/build.rs | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/macros/build.rs b/src/macros/build.rs index a0ad6ab..e655aae 100644 --- a/src/macros/build.rs +++ b/src/macros/build.rs @@ -13,6 +13,7 @@ macro_rules! Build { where effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>, $($type: $crate::Build<'ctx, M, E>,)* + $(effectful::bound::Dynamic<$type>: effectful::environment::DynBind<E>,)* $crate::builders::core::r#struct::StructBuilder<'ctx, __Info, M, E>: $crate::Builder<'ctx, E, Value = Self> { type Builder = $crate::builders::core::r#struct::StructBuilder<'ctx, __Info, M, E>; @@ -83,7 +84,8 @@ macro_rules! Build { impl<'ctx, M: 'ctx, E: effectful::environment::Environment> $crate::builders::core::r#struct::StructTypeInfo<'ctx, M, E> for __Info where effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>, - $($type: $crate::Build<'ctx, M, E>),* + $($type: $crate::Build<'ctx, M, E>,)* + $(effectful::bound::Dynamic<$type>: effectful::environment::DynBind<E>),* { type Builders = Builders<'ctx, M, E>; type FieldMarker = Field; @@ -120,10 +122,10 @@ macro_rules! Build { 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)),)* + $(builders.$field.build().map((), |_, x| x.map(|x| effectful::bound::Dynamic(<<$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 { + Ok(($(effectful::bound::Dynamic($field),)*)) => Ok(effectful::bound::Dynamic($name { $($field),* })), Err(err) => Err(err) |