postgres_named_parameters_derive/
util.rs1use quote::quote;
2
3pub fn get_field_names(struct_ast: &syn::DataStruct) -> Vec<String> {
4 match struct_ast.fields {
5 syn::Fields::Unnamed(_) => vec![],
6 syn::Fields::Unit => vec![],
7 syn::Fields::Named(ref named_fields) => get_field_identifiers(named_fields)
8 .iter()
9 .map(|f| f.to_string())
10 .collect(),
11 }
12}
13
14pub fn get_parameter_list(struct_ast: &syn::DataStruct) -> proc_macro2::TokenStream {
15 match &struct_ast.fields {
16 syn::Fields::Unit => quote!(&[]),
17 syn::Fields::Named(ref named_fields) => {
18 let field_names = get_field_identifiers(named_fields);
19 quote! {
20 &[
21 #(&self.#field_names),*
22 ]
23 }
24 }
25 syn::Fields::Unnamed(unnamed_fields) => {
26 let indices = (0..unnamed_fields.unnamed.len()).map(syn::Index::from);
27 quote! {
28 &[
29 #(&self.#indices),*
30 ]
31 }
32 }
33 }
34}
35
36fn get_field_identifiers(named_fields: &syn::FieldsNamed) -> Vec<proc_macro2::Ident> {
37 named_fields
38 .named
39 .iter()
40 .filter_map(|named_field| named_field.ident.as_ref().map(|i| i.to_owned()))
41 .collect()
42}