diff --git a/graphql_client/tests/input_object_variables.rs b/graphql_client/tests/input_object_variables.rs index 19273ffe..09488d03 100644 --- a/graphql_client/tests/input_object_variables.rs +++ b/graphql_client/tests/input_object_variables.rs @@ -117,3 +117,32 @@ fn indirectly_recursive_input_objects_can_be_constructed() { })), }; } + +#[derive(GraphQLQuery)] +#[graphql( + query_path = "tests/input_object_variables/input_object_variables_query.graphql", + schema_path = "tests/input_object_variables/input_object_variables_schema.graphql", + variables_derives = "Default", + response_derives = "Debug, PartialEq" +)] +pub struct RustNameQuery; + +#[test] +fn rust_name_correctly_mapped() { + use rust_name_query::*; + let value = serde_json::to_value(&Variables { + extern_: Some("hello".to_owned()), + msg: <_>::default(), + }) + .unwrap(); + assert_eq!( + value + .as_object() + .unwrap() + .get("extern") + .unwrap() + .as_str() + .unwrap(), + "hello" + ); +} diff --git a/graphql_client/tests/input_object_variables/input_object_variables_query.graphql b/graphql_client/tests/input_object_variables/input_object_variables_query.graphql index 5cecf5ef..e5ed9ace 100644 --- a/graphql_client/tests/input_object_variables/input_object_variables_query.graphql +++ b/graphql_client/tests/input_object_variables/input_object_variables_query.graphql @@ -15,3 +15,9 @@ query IndirectlyRecursiveInputQuery($input: IndirectlyRecursiveInput!) { query InputCaseTestsQuery($input: CaseTestInput!) { testQueryCase(caseTestInput: $input) } + +query RustNameQuery($msg: Message, $extern: String) { + echo(message: $msg, extern: $extern) { + result + } +} diff --git a/graphql_client/tests/input_object_variables/input_object_variables_schema.graphql b/graphql_client/tests/input_object_variables/input_object_variables_schema.graphql index b13fb0db..5c53303f 100644 --- a/graphql_client/tests/input_object_variables/input_object_variables_schema.graphql +++ b/graphql_client/tests/input_object_variables/input_object_variables_schema.graphql @@ -49,7 +49,7 @@ type CaseTestResult { } type InputObjectVariablesQuery { - echo(message: Message!, options: Options = { pgpSignature: true }): EchoResult + echo(message: Message!, options: Options = { pgpSignature: true }, extern: String = ""): EchoResult testQueryCase(caseTestInput: CaseTestInput!): CaseTestResult saveRecursiveInput(recursiveInput: RecursiveInput!): Category } diff --git a/graphql_client_codegen/src/codegen.rs b/graphql_client_codegen/src/codegen.rs index e32bc321..e4e54363 100644 --- a/graphql_client_codegen/src/codegen.rs +++ b/graphql_client_codegen/src/codegen.rs @@ -133,11 +133,9 @@ fn generate_variable_struct_field( query: &BoundQuery<'_>, ) -> TokenStream { let snake_case_name = variable.name.to_snake_case(); - let ident = Ident::new( - &shared::keyword_replace(&snake_case_name), - Span::call_site(), - ); - let annotation = shared::field_rename_annotation(&variable.name, &snake_case_name); + let safe_name = shared::keyword_replace(&snake_case_name); + let ident = Ident::new(&safe_name, Span::call_site()); + let annotation = shared::field_rename_annotation(&variable.name, &safe_name); let r#type = render_variable_field_type(variable, options, query); quote::quote!(#annotation pub #ident : #r#type)