derive_default_constructor/
lib.rs1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4
5#[proc_macro_derive(DefaultConstructor)]
8pub fn derive_build(input: TokenStream) -> TokenStream {
9 let ast = parse_macro_input!(input as syn::DeriveInput);
10 generate_impl(ast).into()
11}
12
13fn generate_impl(ast: syn::DeriveInput) -> proc_macro2::TokenStream {
14 let struct_name = &ast.ident;
15 let params = ast.generics.params.iter();
16 let generic_params = quote! {#(#params)*};
17 let where_clause = ast.generics.where_clause.as_ref();
18 let where_clause = if let Some(where_clause) = where_clause {
19 quote! { #where_clause }
20 } else {
21 quote! {}
22 };
23
24 let expanded = quote! {
25 impl<#generic_params> #struct_name<#generic_params> #where_clause {
26 pub fn new() -> Self {
27 Self {
28 ..Default::default()
29 }
30 }
31 }
32 };
33 expanded
34}