cynic_codegen/
generics_for_serde.rs

1use syn::parse_quote;
2
3pub(crate) fn with_de_and_deserialize_bounds(generics: &syn::Generics) -> syn::Generics {
4    let mut generics_with_de_and_deserialize_bounds = generics.clone();
5    generics_with_de_and_deserialize_bounds
6        .params
7        .push(parse_quote!('de));
8    for generic in &generics.params {
9        match generic {
10            syn::GenericParam::Type(type_) => {
11                let ident = &type_.ident;
12                generics_with_de_and_deserialize_bounds
13                    .make_where_clause()
14                    .predicates
15                    .push(parse_quote! { #ident: cynic::serde::Deserialize<'de> })
16            }
17            syn::GenericParam::Lifetime(_) | syn::GenericParam::Const(_) => {}
18        }
19    }
20    generics_with_de_and_deserialize_bounds
21}
22
23pub(crate) fn with_serialize_bounds(generics: &syn::Generics) -> syn::Generics {
24    let mut generics_with_serialize_bounds = generics.clone();
25    for generic in &generics.params {
26        match generic {
27            syn::GenericParam::Type(type_) => {
28                let ident = &type_.ident;
29                generics_with_serialize_bounds
30                    .make_where_clause()
31                    .predicates
32                    .push(parse_quote! { #ident: cynic::serde::Serialize })
33            }
34            syn::GenericParam::Lifetime(_) | syn::GenericParam::Const(_) => {}
35        }
36    }
37    generics_with_serialize_bounds
38}