use proc_macro::TokenStream;
use quote::quote;
use syn::parse_macro_input;
#[proc_macro_derive(DefaultConstructor)]
pub fn derive_build(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as syn::DeriveInput);
generate_impl(ast).into()
}
fn generate_impl(ast: syn::DeriveInput) -> proc_macro2::TokenStream {
let struct_name = &ast.ident;
let params = ast.generics.params.iter();
let generic_params = quote! {#(#params)*};
let where_clause = ast.generics.where_clause.as_ref();
let where_clause = if let Some(where_clause) = where_clause {
quote! { #where_clause }
} else {
quote! {}
};
let expanded = quote! {
impl<#generic_params> #struct_name<#generic_params> #where_clause {
pub fn new() -> Self {
Self {
..Default::default()
}
}
}
};
expanded
}