mod builders;
mod extract;
mod fields_module;
mod generics_utils;
mod merge;
mod nested_setters;
mod serde_deserialize;
mod struct_def;
mod type_subst;
use proc_macro2::TokenStream;
use quote::quote;
use syn::DeriveInput;
use crate::parsing;
pub fn generate(input: DeriveInput) -> syn::Result<TokenStream> {
let info = parsing::parse_struct(input)?;
let (serde_helper, serde_try_from) = serde_deserialize::generate(&info)?;
let fields_mod = fields_module::generate(&info, serde_helper);
let struct_def = struct_def::generate(&info);
let builders = builders::generate(&info);
let nested_setters = nested_setters::generate(&info);
let merge = merge::generate(&info);
let extract = extract::generate(&info);
Ok(quote! {
#fields_mod
#serde_try_from
#struct_def
#builders
#nested_setters
#merge
#extract
})
}