From a46c6cb52a7954c776fd63147681cecdb55136ec Mon Sep 17 00:00:00 2001 From: Bill Avery Date: Fri, 21 Jan 2022 13:08:51 -0800 Subject: [PATCH 1/3] Fix #199 --- src/ClientGenerator.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ClientGenerator.cpp b/src/ClientGenerator.cpp index a68881be..fee536e1 100644 --- a/src/ClientGenerator.cpp +++ b/src/ClientGenerator.cpp @@ -206,7 +206,8 @@ static_assert(graphql::internal::MinorVersion == )cpp" { pendingSeparator.reset(); - headerFile << R"cpp(enum class )cpp" << _schemaLoader.getCppType(enumType->name()) << R"cpp( + headerFile << R"cpp(enum class )cpp" << _schemaLoader.getCppType(enumType->name()) + << R"cpp( { )cpp"; for (const auto& enumValue : enumType->enumValues()) @@ -605,8 +606,14 @@ response::Value serializeVariables(Variables&& variables) for (const auto& variable : variables) { sourceFile << R"cpp( result.emplace_back(R"js()cpp" << variable.name - << R"cpp()js"s, ModifiedVariablename()) << R"cpp(>::serialize)cpp" + << R"cpp()js"s, ModifiedVariable<)cpp"; + + if (_schemaLoader.getSchemaType(variable.type->name()) != SchemaType::Scalar) + { + sourceFile << R"cpp(Variables::)cpp"; + } + + sourceFile << _schemaLoader.getCppType(variable.type->name()) << R"cpp(>::serialize)cpp" << getTypeModifierList(variable.modifiers) << R"cpp((std::move(variables.)cpp" << variable.cppName << R"cpp())); )cpp"; From 32b32907cbdcfbb2cd2a7f4440ec59523d63888a Mon Sep 17 00:00:00 2001 From: Bill Avery Date: Fri, 21 Jan 2022 13:26:20 -0800 Subject: [PATCH 2/3] Add a test for #199 --- samples/client/mutate/mutate.today.graphql | 4 ++-- src/ClientGenerator.cpp | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/samples/client/mutate/mutate.today.graphql b/samples/client/mutate/mutate.today.graphql index cc90c461..ac0730ce 100644 --- a/samples/client/mutate/mutate.today.graphql +++ b/samples/client/mutate/mutate.today.graphql @@ -1,13 +1,13 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. -mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}) { +mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}, $skipClientMutationId: Boolean!) { completedTask: completeTask(input: $input) { completedTask: task { completedTaskId: id title isComplete } - clientMutationId + clientMutationId @skip(if: $skipClientMutationId) } } diff --git a/src/ClientGenerator.cpp b/src/ClientGenerator.cpp index fee536e1..93506d0f 100644 --- a/src/ClientGenerator.cpp +++ b/src/ClientGenerator.cpp @@ -608,7 +608,10 @@ response::Value serializeVariables(Variables&& variables) sourceFile << R"cpp( result.emplace_back(R"js()cpp" << variable.name << R"cpp()js"s, ModifiedVariable<)cpp"; - if (_schemaLoader.getSchemaType(variable.type->name()) != SchemaType::Scalar) + const auto& builtinTypes = _schemaLoader.getBuiltinTypes(); + + if (builtinTypes.find(variable.type->name()) == builtinTypes.cend() + && _schemaLoader.getSchemaType(variable.type->name()) != SchemaType::Scalar) { sourceFile << R"cpp(Variables::)cpp"; } From 4938f4ed7ea1222b0e3c9b0bb97ccac2093cd6a0 Mon Sep 17 00:00:00 2001 From: Bill Avery Date: Fri, 21 Jan 2022 13:26:31 -0800 Subject: [PATCH 3/3] Regenerate MutateClient --- samples/client/mutate/MutateClient.cpp | 5 +++-- samples/client/mutate/MutateClient.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/samples/client/mutate/MutateClient.cpp b/samples/client/mutate/MutateClient.cpp index 2eb9325c..99817182 100644 --- a/samples/client/mutate/MutateClient.cpp +++ b/samples/client/mutate/MutateClient.cpp @@ -132,14 +132,14 @@ const std::string& GetRequestText() noexcept # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. - mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}) { + mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}, $skipClientMutationId: Boolean!) { completedTask: completeTask(input: $input) { completedTask: task { completedTaskId: id title isComplete } - clientMutationId + clientMutationId @skip(if: $skipClientMutationId) } } )gql"s; @@ -166,6 +166,7 @@ response::Value serializeVariables(Variables&& variables) response::Value result { response::Type::Map }; result.emplace_back(R"js(input)js"s, ModifiedVariable::serialize(std::move(variables.input))); + result.emplace_back(R"js(skipClientMutationId)js"s, ModifiedVariable::serialize(std::move(variables.skipClientMutationId))); return result; } diff --git a/samples/client/mutate/MutateClient.h b/samples/client/mutate/MutateClient.h index 03fc7676..6a637a00 100644 --- a/samples/client/mutate/MutateClient.h +++ b/samples/client/mutate/MutateClient.h @@ -29,14 +29,14 @@ static_assert(graphql::internal::MinorVersion == 1, "regenerate with clientgen: /// # Copyright (c) Microsoft Corporation. All rights reserved. /// # Licensed under the MIT License. /// -/// mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}) { +/// mutation CompleteTaskMutation($input: CompleteTaskInput! = {id: "ZmFrZVRhc2tJZA==", isComplete: true, clientMutationId: "Hi There!"}, $skipClientMutationId: Boolean!) { /// completedTask: completeTask(input: $input) { /// completedTask: task { /// completedTaskId: id /// title /// isComplete /// } -/// clientMutationId +/// clientMutationId @skip(if: $skipClientMutationId) /// } /// } /// @@ -67,6 +67,7 @@ struct Variables }; CompleteTaskInput input {}; + bool skipClientMutationId {}; }; response::Value serializeVariables(Variables&& variables);