in shed/facet/proc_macros/container_impl.rs [167:214]
fn gen_buildable_impl(
facet_crate: &Ident,
container_name: &Ident,
members: &ContainerMembers,
) -> TokenStream {
let facet_idents = &members.facet_idents;
let facet_types = &members.facet_types;
let field_idents = &members.field_idents;
let field_inits = &members.field_inits;
let delegate_idents = &members.delegate_idents;
let delegate_types = &members.delegate_types;
quote! {
impl<B> ::#facet_crate::Buildable<B> for #container_name
where B: ::std::marker::Send + ::std::marker::Sync
#( + ::#facet_crate::Builder<::std::sync::Arc<#facet_types>> )*,
#( #delegate_types: ::#facet_crate::Buildable<B>, )*
{
fn build(builder: &mut B) -> ::std::result::Result<Self, ::#facet_crate::FactoryError> {
// Build each delegate.
#(
let #delegate_idents =
<#delegate_types as ::#facet_crate::Buildable<B>>::build(builder)?;
)*
// Build each facet.
#(
let #facet_idents =
<B as ::#facet_crate::Builder<
::std::sync::Arc<#facet_types>
>>::build(builder)?;
)*
// Initialize the other fields.
#(
let #field_idents = #field_inits;
)*
Ok(Self {
#( #delegate_idents, )*
#( #field_idents, )*
#( #facet_idents, )*
})
}
}
}
}