MCPcopy Create free account
hub / github.com/biblius/validify / generate_struct

Function generate_struct

validify_derive/src/payload.rs:16–82  ·  view source on GitHub ↗
(input: &syn::DeriveInput)

Source from the content-addressed store, hash-verified

14}
15
16pub(super) fn generate_struct(input: &syn::DeriveInput) -> proc_macro2::TokenStream {
17 let ident = &input.ident;
18
19 let payload_ident = payload_ident(ident);
20
21 // Collect only serde attributes to propagate to the payload
22 let attributes = input
23 .attrs
24 .iter()
25 .filter(|attr| attr.meta.path().is_ident("serde"))
26 .collect::<Vec<_>>();
27
28 let visibility = &input.vis;
29
30 let fields = FieldInfo::collect(input);
31
32 let mut payload_fields = vec![];
33 let mut custom_serdes = vec![];
34
35 for field in fields.iter() {
36 let (payload_tokens, custom_serde) = map_payload_fields(field);
37 payload_fields.push(payload_tokens);
38 if let Some(custom_de) = custom_serde {
39 custom_serdes.push(custom_de);
40 }
41 }
42
43 let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
44
45 let into_fields = fields
46 .iter()
47 .map(map_into_fields)
48 .collect::<Vec<proc_macro2::TokenStream>>();
49
50 let from_fields = fields
51 .iter()
52 .map(map_from_fields)
53 .collect::<Vec<proc_macro2::TokenStream>>();
54
55 let quoted = quote!(
56 #[derive(Debug, ::validify::Validate, serde::Deserialize)]
57 #(#attributes)*
58 #visibility struct #payload_ident #ty_generics #where_clause {
59 #(#payload_fields)*
60 }
61
62 impl #impl_generics From<#ident> for #payload_ident {
63 fn from(original: #ident) -> Self {
64 Self {
65 #(#into_fields)*
66 }
67 }
68 }
69
70 impl #impl_generics From<#payload_ident> for #ident {
71 fn from(payload: #payload_ident) -> Self {
72 Self {
73 #(#from_fields)*

Callers 1

impl_payloadFunction · 0.85

Calls 2

payload_identFunction · 0.85
map_payload_fieldsFunction · 0.85

Tested by

no test coverage detected