Skip to content

Commit 93bb6ba

Browse files
committed
Extract the #[serde(rename = "...")] codegen logic to the shared module
1 parent c064fb8 commit 93bb6ba

File tree

3 files changed

+15
-17
lines changed

3 files changed

+15
-17
lines changed

graphql_query_derive/src/inputs.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ impl GqlInput {
2424
let ty = field.type_.to_rust(&context, "");
2525
let original_name = &field.name;
2626
let snake_case_name = field.name.to_snake_case();
27-
let rename = if snake_case_name.as_str() != original_name.as_str() {
28-
quote!(#[serde(rename = #original_name)])
29-
} else {
30-
quote!()
31-
};
27+
let rename = ::shared::field_rename_annotation(&original_name, &snake_case_name);
3228
let name = Ident::new(&snake_case_name, Span::call_site());
3329

3430
quote!(#rename pub #name: #ty)

graphql_query_derive/src/operations.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,9 @@ impl Operation {
5151
let name = &variable.name;
5252
let ty = variable.ty.to_rust(context, "");
5353
let snake_case_name = name.to_snake_case();
54-
let rename = if snake_case_name.as_str() != name.as_str() {
55-
quote!(#[serde(rename = #name)])
56-
} else {
57-
quote!()
58-
};
54+
let rename = ::shared::field_rename_annotation(&name, &snake_case_name);
5955
let name = Ident::new(&snake_case_name, Span::call_site());
56+
6057
quote!(#rename pub #name: #ty)
6158
});
6259

graphql_query_derive/src/shared.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,7 @@ pub(crate) fn render_object_field(
2121
}
2222

2323
let snake_case_name = field_name.to_snake_case();
24-
25-
let rename = if snake_case_name != field_name {
26-
quote!(#[serde(rename = #field_name)])
27-
} else {
28-
quote!()
29-
};
30-
24+
let rename = ::shared::field_rename_annotation(&field_name, &snake_case_name);
3125
let name_ident = Ident::new(&snake_case_name, Span::call_site());
3226

3327
quote!(#description #rename pub #name_ident: #field_type)
@@ -104,3 +98,14 @@ pub(crate) fn response_fields_for_selection(
10498
}
10599
}).collect()
106100
}
101+
102+
/// Given the GraphQL schema name for an object/interface/input object field and
103+
/// the equivalent rust name, produces a serde annotation to map them during
104+
/// (de)serialization if it is necessary, otherwise an empty TokenStream.
105+
pub(crate) fn field_rename_annotation(graphql_name: &str, rust_name: &str) -> TokenStream {
106+
if graphql_name != rust_name {
107+
quote!(#[serde(rename = #graphql_name)])
108+
} else {
109+
quote!()
110+
}
111+
}

0 commit comments

Comments
 (0)