bon_macros/builder/
item_struct.rs

1use super::builder_gen::input_struct::StructInputCtx;
2use super::builder_gen::MacroOutput;
3use crate::util::prelude::*;
4
5pub(crate) fn generate(orig_struct: syn::ItemStruct) -> Result<TokenStream> {
6    let struct_ident = orig_struct.ident.clone();
7    let ctx = StructInputCtx::new(orig_struct)?;
8
9    let MacroOutput {
10        mut start_fn,
11        other_items,
12    } = ctx.into_builder_gen_ctx()?.output()?;
13
14    let impl_generics = std::mem::take(&mut start_fn.sig.generics);
15
16    let (generics_decl, generic_args, where_clause) = impl_generics.split_for_impl();
17
18    Ok(quote! {
19        #[automatically_derived]
20        impl #generics_decl #struct_ident #generic_args
21            #where_clause
22        {
23            #start_fn
24        }
25
26        #other_items
27    })
28}