1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
mod code_generate;
use code_generate::sub_model::load_from_sub_model_defs;
use darling::FromDeriveInput;
use darling_models::struct_item_infos::SubModelDefs;
use syn::{parse_macro_input, DeriveInput};
mod darling_models;
#[proc_macro_derive(SubModel, attributes(sub_model))]
pub fn sub_model_derive_marco(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let derive_input = parse_macro_input!(input as DeriveInput);
let SubModelDefs {
src_name,
sub_models,
fields,
} = match <SubModelDefs as FromDeriveInput>::from_derive_input(&derive_input) {
Ok(d) => d,
Err(err) => return err.write_errors().into(),
};
let sub_models = load_from_sub_model_defs(&src_name, sub_models, &fields)
.expect("Darling Error")
.into_iter()
.map(|(_, v)| v);
quote::quote! {
#(
#sub_models
)*
}
.into()
}