Skip to content

Commit f5fa468

Browse files
authored
Merge pull request #341 from wravery/merge-337
2 parents b61e0d5 + 29ccf43 commit f5fa468

19 files changed

+93
-27
lines changed

include/graphqlservice/GraphQLClient.h

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,19 @@ struct ModifiedVariable
168168
response::Value result { response::Type::List };
169169

170170
result.reserve(listValue.size());
171-
std::ranges::for_each(listValue, [&result](auto& value) {
172-
result.emplace_back(serialize<Other...>(std::move(value)));
173-
});
171+
if constexpr (std::is_same_v<Type, bool> && OnlyNoneModifiers<Other...>)
172+
{
173+
std::ranges::for_each(listValue, [&result](bool value) {
174+
result.emplace_back(response::Value { value });
175+
});
176+
}
177+
else
178+
{
179+
std::ranges::for_each(listValue, [&result](auto& value) {
180+
result.emplace_back(serialize<Other...>(std::move(value)));
181+
});
182+
}
183+
174184
listValue.clear();
175185

176186
return result;
@@ -219,7 +229,14 @@ struct ModifiedVariable
219229
{
220230
typename VariableTraits<Type, Modifier, Other...>::type result(listValue.size());
221231

222-
std::ranges::transform(listValue, result.begin(), duplicate<Other...>);
232+
if constexpr (std::is_same_v<Type, bool> && OnlyNoneModifiers<Other...>)
233+
{
234+
std::copy(listValue.begin(), listValue.end(), result.begin());
235+
}
236+
else
237+
{
238+
std::ranges::transform(listValue, result.begin(), duplicate<Other...>);
239+
}
223240

224241
return result;
225242
}

include/graphqlservice/GraphQLService.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,14 @@ struct ModifiedArgument
797797
{
798798
typename ArgumentTraits<Type, Modifier, Other...>::type result(listValue.size());
799799

800-
std::ranges::transform(listValue, result.begin(), duplicate<Other...>);
800+
if constexpr (std::is_same_v<Type, bool> && OnlyNoneModifiers<Other...>)
801+
{
802+
std::copy(listValue.begin(), listValue.end(), result.begin());
803+
}
804+
else
805+
{
806+
std::ranges::transform(listValue, result.begin(), duplicate<Other...>);
807+
}
801808

802809
return result;
803810
}

samples/client/multiple/MultipleQueriesClient.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ CompleteTaskInput::CompleteTaskInput() noexcept
131131
, testTaskState {}
132132
, isComplete {}
133133
, clientMutationId {}
134+
, boolList {}
134135
{
135136
// Explicit definition to prevent ODR violations when LTO is enabled.
136137
}
@@ -139,11 +140,13 @@ CompleteTaskInput::CompleteTaskInput(
139140
response::IdType idArg,
140141
std::optional<TaskState> testTaskStateArg,
141142
std::optional<bool> isCompleteArg,
142-
std::optional<std::string> clientMutationIdArg) noexcept
143+
std::optional<std::string> clientMutationIdArg,
144+
std::optional<std::vector<bool>> boolListArg) noexcept
143145
: id { std::move(idArg) }
144146
, testTaskState { std::move(testTaskStateArg) }
145147
, isComplete { std::move(isCompleteArg) }
146148
, clientMutationId { std::move(clientMutationIdArg) }
149+
, boolList { std::move(boolListArg) }
147150
{
148151
}
149152

@@ -152,6 +155,7 @@ CompleteTaskInput::CompleteTaskInput(const CompleteTaskInput& other)
152155
, testTaskState { ModifiedVariable<TaskState>::duplicate<TypeModifier::Nullable>(other.testTaskState) }
153156
, isComplete { ModifiedVariable<bool>::duplicate<TypeModifier::Nullable>(other.isComplete) }
154157
, clientMutationId { ModifiedVariable<std::string>::duplicate<TypeModifier::Nullable>(other.clientMutationId) }
158+
, boolList { ModifiedVariable<bool>::duplicate<TypeModifier::Nullable, TypeModifier::List>(other.boolList) }
155159
{
156160
}
157161

@@ -160,6 +164,7 @@ CompleteTaskInput::CompleteTaskInput(CompleteTaskInput&& other) noexcept
160164
, testTaskState { std::move(other.testTaskState) }
161165
, isComplete { std::move(other.isComplete) }
162166
, clientMutationId { std::move(other.clientMutationId) }
167+
, boolList { std::move(other.boolList) }
163168
{
164169
}
165170

@@ -179,6 +184,7 @@ CompleteTaskInput& CompleteTaskInput::operator=(CompleteTaskInput&& other) noexc
179184
testTaskState = std::move(other.testTaskState);
180185
isComplete = std::move(other.isComplete);
181186
clientMutationId = std::move(other.clientMutationId);
187+
boolList = std::move(other.boolList);
182188

183189
return *this;
184190
}
@@ -2316,6 +2322,7 @@ response::Value Variable<CompleteTaskInput>::serialize(CompleteTaskInput&& input
23162322
result.emplace_back(R"js(testTaskState)js"s, ModifiedVariable<TaskState>::serialize<TypeModifier::Nullable>(std::move(inputValue.testTaskState)));
23172323
result.emplace_back(R"js(isComplete)js"s, ModifiedVariable<bool>::serialize<TypeModifier::Nullable>(std::move(inputValue.isComplete)));
23182324
result.emplace_back(R"js(clientMutationId)js"s, ModifiedVariable<std::string>::serialize<TypeModifier::Nullable>(std::move(inputValue.clientMutationId)));
2325+
result.emplace_back(R"js(boolList)js"s, ModifiedVariable<bool>::serialize<TypeModifier::Nullable, TypeModifier::List>(std::move(inputValue.boolList)));
23192326

23202327
return result;
23212328
}

samples/client/multiple/MultipleQueriesClient.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
132132
response::IdType idArg,
133133
std::optional<TaskState> testTaskStateArg,
134134
std::optional<bool> isCompleteArg,
135-
std::optional<std::string> clientMutationIdArg) noexcept;
135+
std::optional<std::string> clientMutationIdArg,
136+
std::optional<std::vector<bool>> boolListArg) noexcept;
136137
CompleteTaskInput(const CompleteTaskInput& other);
137138
CompleteTaskInput(CompleteTaskInput&& other) noexcept;
138139
~CompleteTaskInput();
@@ -144,6 +145,7 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
144145
std::optional<TaskState> testTaskState;
145146
std::optional<bool> isComplete;
146147
std::optional<std::string> clientMutationId;
148+
std::optional<std::vector<bool>> boolList;
147149
};
148150

149151
namespace client {

samples/client/mutate/MutateClient.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ CompleteTaskInput::CompleteTaskInput() noexcept
6464
, testTaskState {}
6565
, isComplete {}
6666
, clientMutationId {}
67+
, boolList {}
6768
{
6869
// Explicit definition to prevent ODR violations when LTO is enabled.
6970
}
@@ -72,11 +73,13 @@ CompleteTaskInput::CompleteTaskInput(
7273
response::IdType idArg,
7374
std::optional<TaskState> testTaskStateArg,
7475
std::optional<bool> isCompleteArg,
75-
std::optional<std::string> clientMutationIdArg) noexcept
76+
std::optional<std::string> clientMutationIdArg,
77+
std::optional<std::vector<bool>> boolListArg) noexcept
7678
: id { std::move(idArg) }
7779
, testTaskState { std::move(testTaskStateArg) }
7880
, isComplete { std::move(isCompleteArg) }
7981
, clientMutationId { std::move(clientMutationIdArg) }
82+
, boolList { std::move(boolListArg) }
8083
{
8184
}
8285

@@ -85,6 +88,7 @@ CompleteTaskInput::CompleteTaskInput(const CompleteTaskInput& other)
8588
, testTaskState { ModifiedVariable<TaskState>::duplicate<TypeModifier::Nullable>(other.testTaskState) }
8689
, isComplete { ModifiedVariable<bool>::duplicate<TypeModifier::Nullable>(other.isComplete) }
8790
, clientMutationId { ModifiedVariable<std::string>::duplicate<TypeModifier::Nullable>(other.clientMutationId) }
91+
, boolList { ModifiedVariable<bool>::duplicate<TypeModifier::Nullable, TypeModifier::List>(other.boolList) }
8892
{
8993
}
9094

@@ -93,6 +97,7 @@ CompleteTaskInput::CompleteTaskInput(CompleteTaskInput&& other) noexcept
9397
, testTaskState { std::move(other.testTaskState) }
9498
, isComplete { std::move(other.isComplete) }
9599
, clientMutationId { std::move(other.clientMutationId) }
100+
, boolList { std::move(other.boolList) }
96101
{
97102
}
98103

@@ -112,6 +117,7 @@ CompleteTaskInput& CompleteTaskInput::operator=(CompleteTaskInput&& other) noexc
112117
testTaskState = std::move(other.testTaskState);
113118
isComplete = std::move(other.isComplete);
114119
clientMutationId = std::move(other.clientMutationId);
120+
boolList = std::move(other.boolList);
115121

116122
return *this;
117123
}
@@ -148,6 +154,7 @@ response::Value Variable<CompleteTaskInput>::serialize(CompleteTaskInput&& input
148154
result.emplace_back(R"js(testTaskState)js"s, ModifiedVariable<TaskState>::serialize<TypeModifier::Nullable>(std::move(inputValue.testTaskState)));
149155
result.emplace_back(R"js(isComplete)js"s, ModifiedVariable<bool>::serialize<TypeModifier::Nullable>(std::move(inputValue.isComplete)));
150156
result.emplace_back(R"js(clientMutationId)js"s, ModifiedVariable<std::string>::serialize<TypeModifier::Nullable>(std::move(inputValue.clientMutationId)));
157+
result.emplace_back(R"js(boolList)js"s, ModifiedVariable<bool>::serialize<TypeModifier::Nullable, TypeModifier::List>(std::move(inputValue.boolList)));
151158

152159
return result;
153160
}

samples/client/mutate/MutateClient.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
6565
response::IdType idArg,
6666
std::optional<TaskState> testTaskStateArg,
6767
std::optional<bool> isCompleteArg,
68-
std::optional<std::string> clientMutationIdArg) noexcept;
68+
std::optional<std::string> clientMutationIdArg,
69+
std::optional<std::vector<bool>> boolListArg) noexcept;
6970
CompleteTaskInput(const CompleteTaskInput& other);
7071
CompleteTaskInput(CompleteTaskInput&& other) noexcept;
7172
~CompleteTaskInput();
@@ -77,6 +78,7 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
7778
std::optional<TaskState> testTaskState;
7879
std::optional<bool> isComplete;
7980
std::optional<std::string> clientMutationId;
81+
std::optional<std::vector<bool>> boolList;
8082
};
8183

8284
namespace client {

samples/learn/schema/StarWarsSharedTypes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ service::AwaitableResolver Result<learn::Episode>::convert(service::AwaitableSca
5050
return ModifiedResult<learn::Episode>::resolve(std::move(result), std::move(params),
5151
[](learn::Episode value, const ResolverParams&)
5252
{
53-
const size_t idx = static_cast<size_t>(value);
53+
const auto idx = static_cast<size_t>(value);
5454

5555
if (idx >= s_namesEpisode.size())
5656
{

samples/proxy/schema/ProxySharedTypes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ service::AwaitableResolver Result<proxy::OperationType>::convert(service::Awaita
5050
return ModifiedResult<proxy::OperationType>::resolve(std::move(result), std::move(params),
5151
[](proxy::OperationType value, const ResolverParams&)
5252
{
53-
const size_t idx = static_cast<size_t>(value);
53+
const auto idx = static_cast<size_t>(value);
5454

5555
if (idx >= s_namesOperationType.size())
5656
{

samples/today/nointrospection/TodaySchema.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ void AddTypesToSchema(const std::shared_ptr<schema::Schema>& schema)
109109
schema::InputValue::Make(R"gql(id)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(ID)gql"sv)), R"gql()gql"sv),
110110
schema::InputValue::Make(R"gql(testTaskState)gql"sv, R"md()md"sv, schema->LookupType(R"gql(TaskState)gql"sv), R"gql()gql"sv),
111111
schema::InputValue::Make(R"gql(isComplete)gql"sv, R"md()md"sv, schema->LookupType(R"gql(Boolean)gql"sv), R"gql(true)gql"sv),
112-
schema::InputValue::Make(R"gql(clientMutationId)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql()gql"sv)
112+
schema::InputValue::Make(R"gql(clientMutationId)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql()gql"sv),
113+
schema::InputValue::Make(R"gql(boolList)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::LIST, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(Boolean)gql"sv))), R"gql()gql"sv)
113114
});
114115
typeThirdNestedInput->AddInputValues({
115116
schema::InputValue::Make(R"gql(id)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(ID)gql"sv)), R"gql()gql"sv),

samples/today/nointrospection/TodaySharedTypes.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ service::AwaitableResolver Result<today::TaskState>::convert(service::AwaitableS
5050
return ModifiedResult<today::TaskState>::resolve(std::move(result), std::move(params),
5151
[](today::TaskState value, const ResolverParams&)
5252
{
53-
const size_t idx = static_cast<size_t>(value);
53+
const auto idx = static_cast<size_t>(value);
5454

5555
if (idx >= s_namesTaskState.size())
5656
{
@@ -101,12 +101,14 @@ today::CompleteTaskInput Argument<today::CompleteTaskInput>::convert(const respo
101101
? std::move(pairIsComplete.first)
102102
: service::ModifiedArgument<bool>::require<service::TypeModifier::Nullable>("isComplete", defaultValue));
103103
auto valueClientMutationId = service::ModifiedArgument<std::string>::require<service::TypeModifier::Nullable>("clientMutationId", value);
104+
auto valueBoolList = service::ModifiedArgument<bool>::require<service::TypeModifier::Nullable, service::TypeModifier::List>("boolList", value);
104105

105106
return today::CompleteTaskInput {
106107
std::move(valueId),
107108
valueTestTaskState,
108109
std::move(valueIsComplete),
109-
std::move(valueClientMutationId)
110+
std::move(valueClientMutationId),
111+
std::move(valueBoolList)
110112
};
111113
}
112114

@@ -231,6 +233,7 @@ CompleteTaskInput::CompleteTaskInput() noexcept
231233
, testTaskState {}
232234
, isComplete {}
233235
, clientMutationId {}
236+
, boolList {}
234237
{
235238
// Explicit definition to prevent ODR violations when LTO is enabled.
236239
}
@@ -239,11 +242,13 @@ CompleteTaskInput::CompleteTaskInput(
239242
response::IdType idArg,
240243
std::optional<TaskState> testTaskStateArg,
241244
std::optional<bool> isCompleteArg,
242-
std::optional<std::string> clientMutationIdArg) noexcept
245+
std::optional<std::string> clientMutationIdArg,
246+
std::optional<std::vector<bool>> boolListArg) noexcept
243247
: id { std::move(idArg) }
244248
, testTaskState { std::move(testTaskStateArg) }
245249
, isComplete { std::move(isCompleteArg) }
246250
, clientMutationId { std::move(clientMutationIdArg) }
251+
, boolList { std::move(boolListArg) }
247252
{
248253
}
249254

@@ -252,6 +257,7 @@ CompleteTaskInput::CompleteTaskInput(const CompleteTaskInput& other)
252257
, testTaskState { service::ModifiedArgument<TaskState>::duplicate<service::TypeModifier::Nullable>(other.testTaskState) }
253258
, isComplete { service::ModifiedArgument<bool>::duplicate<service::TypeModifier::Nullable>(other.isComplete) }
254259
, clientMutationId { service::ModifiedArgument<std::string>::duplicate<service::TypeModifier::Nullable>(other.clientMutationId) }
260+
, boolList { service::ModifiedArgument<bool>::duplicate<service::TypeModifier::Nullable, service::TypeModifier::List>(other.boolList) }
255261
{
256262
}
257263

@@ -260,6 +266,7 @@ CompleteTaskInput::CompleteTaskInput(CompleteTaskInput&& other) noexcept
260266
, testTaskState { std::move(other.testTaskState) }
261267
, isComplete { std::move(other.isComplete) }
262268
, clientMutationId { std::move(other.clientMutationId) }
269+
, boolList { std::move(other.boolList) }
263270
{
264271
}
265272

@@ -283,6 +290,7 @@ CompleteTaskInput& CompleteTaskInput::operator=(CompleteTaskInput&& other) noexc
283290
testTaskState = std::move(other.testTaskState);
284291
isComplete = std::move(other.isComplete);
285292
clientMutationId = std::move(other.clientMutationId);
293+
boolList = std::move(other.boolList);
286294

287295
return *this;
288296
}

samples/today/nointrospection/TodaySharedTypes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
6565
response::IdType idArg,
6666
std::optional<TaskState> testTaskStateArg,
6767
std::optional<bool> isCompleteArg,
68-
std::optional<std::string> clientMutationIdArg) noexcept;
68+
std::optional<std::string> clientMutationIdArg,
69+
std::optional<std::vector<bool>> boolListArg) noexcept;
6970
CompleteTaskInput(const CompleteTaskInput& other);
7071
CompleteTaskInput(CompleteTaskInput&& other) noexcept;
7172
~CompleteTaskInput();
@@ -77,6 +78,7 @@ struct [[nodiscard("unnecessary construction")]] CompleteTaskInput
7778
std::optional<TaskState> testTaskState;
7879
std::optional<bool> isComplete;
7980
std::optional<std::string> clientMutationId;
81+
std::optional<std::vector<bool>> boolList;
8082
};
8183

8284
struct SecondNestedInput;

samples/today/schema.today.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ input CompleteTaskInput {
8787
testTaskState: TaskState
8888
isComplete: Boolean = true
8989
clientMutationId: String
90+
boolList: [Boolean!]
9091
}
9192

9293
type CompleteTaskPayload {

samples/today/schema/TodaySchema.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ void AddTypesToSchema(const std::shared_ptr<schema::Schema>& schema)
112112
schema::InputValue::Make(R"gql(id)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(ID)gql"sv)), R"gql()gql"sv),
113113
schema::InputValue::Make(R"gql(testTaskState)gql"sv, R"md()md"sv, schema->LookupType(R"gql(TaskState)gql"sv), R"gql()gql"sv),
114114
schema::InputValue::Make(R"gql(isComplete)gql"sv, R"md()md"sv, schema->LookupType(R"gql(Boolean)gql"sv), R"gql(true)gql"sv),
115-
schema::InputValue::Make(R"gql(clientMutationId)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql()gql"sv)
115+
schema::InputValue::Make(R"gql(clientMutationId)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql()gql"sv),
116+
schema::InputValue::Make(R"gql(boolList)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::LIST, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(Boolean)gql"sv))), R"gql()gql"sv)
116117
});
117118
typeThirdNestedInput->AddInputValues({
118119
schema::InputValue::Make(R"gql(id)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(ID)gql"sv)), R"gql()gql"sv),

0 commit comments

Comments
 (0)