derive-default-constructor 0.1.0

A simple macro to derive default constructors for structs
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn::parse_macro_input;

/// Derive macro for generating a default constructor for structs.
/// Simply aliases the `Default` trait to provide a `new` method.
#[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
}