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

Function impl_payload

validify_derive/src/payload/impl.rs:4–56  ·  view source on GitHub ↗
(input: &DeriveInput)

Source from the content-addressed store, hash-verified

2use syn::DeriveInput;
3
4pub fn impl_payload(input: &DeriveInput) -> proc_macro2::TokenStream {
5 let ident = &input.ident;
6 let strct = super::generate_struct(input);
7 let payload_id = super::payload_ident(ident);
8
9 let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
10
11 quote!(
12 #strct
13
14 impl #impl_generics ::validify::ValidifyPayload for #ident #ty_generics #where_clause {
15 type Payload = #payload_id;
16
17 fn validate_from(payload: Self::Payload) -> Result<Self, ::validify::ValidationErrors>
18 {
19 <Self::Payload as ::validify::Validate>::validate(&payload)?;
20
21 let mut this = #ident ::from(payload);
22
23 let mut errors = ::validify::ValidationErrors::new();
24
25 if let Err(errs) = <#ident as ::validify::Validate>::validate(&this) {
26 errors.merge(errs);
27 }
28
29 if !errors.is_empty() {
30 Err(errors)
31 } else {
32 Ok(this)
33 }
34 }
35
36 fn validify_from(payload: Self::Payload) -> Result<Self, ::validify::ValidationErrors>
37 {
38 <Self::Payload as ::validify::Validate>::validate(&payload)?;
39
40 let mut this = #ident ::from(payload);
41
42 let mut errors = ::validify::ValidationErrors::new();
43
44 if let Err(errs) = <#ident as ::validify::Validify>::validify(&mut this) {
45 errors.merge(errs);
46 }
47
48 if !errors.is_empty() {
49 Err(errors)
50 } else {
51 Ok(this)
52 }
53 }
54 }
55 )
56}

Callers 1

derive_payloadFunction · 0.85

Calls 2

generate_structFunction · 0.85
payload_identFunction · 0.85

Tested by

no test coverage detected