1mod utils;
2
3use utils::{get_standard_library_types, update_field::FieldsContext};
4
5#[proc_macro_derive(ExtractFields, attributes(extract))]
6pub fn derive_macro(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
7 let ast: syn::DeriveInput = match syn::parse(input) {
8 Ok(parsed) => parsed,
9 Err(e) => return e.to_compile_error().into(),
10 };
11
12 let struct_name = &ast.ident;
13 let std_types = &get_standard_library_types();
14
15 let mut params = FieldsContext::new(struct_name, std_types);
16 let mut params = params.as_mut_refs();
17 match params.get_fields(&ast) {
18 Ok(()) => {}
19 Err(e) => {
20 return e.to_compile_error().into();
21 }
22 }
23
24 let gen_update_fields = match params.generate_update_fields() {
25 Ok(gen) => gen,
26 Err(e) => return e.to_compile_error().into(),
27 };
28
29 gen_update_fields.into()
30}