Skip to main content

nom_xml_derive/
lib.rs

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}