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}