Skip to content

Commit f5e7eb2

Browse files
committed
Separate clientgen static methods from template methods
1 parent 3cba18d commit f5e7eb2

File tree

9 files changed

+107
-92
lines changed

9 files changed

+107
-92
lines changed

include/graphqlservice/GraphQLClient.h

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,33 @@ enum class [[nodiscard]] TypeModifier {
7070
List,
7171
};
7272

73+
// Serialize a single variable input value.
74+
template <typename Type>
75+
struct Variable
76+
{
77+
// Serialize a single value to the variables document.
78+
[[nodiscard]] static response::Value serialize(Type&& value);
79+
};
80+
81+
#ifdef GRAPHQL_DLLEXPORTS
82+
// Export all of the built-in converters
83+
template <>
84+
GRAPHQLCLIENT_EXPORT response::Value Variable<int>::serialize(int&& value);
85+
template <>
86+
GRAPHQLCLIENT_EXPORT response::Value Variable<double>::serialize(double&& value);
87+
template <>
88+
GRAPHQLCLIENT_EXPORT response::Value Variable<std::string>::serialize(std::string&& value);
89+
template <>
90+
GRAPHQLCLIENT_EXPORT response::Value Variable<bool>::serialize(bool&& value);
91+
template <>
92+
GRAPHQLCLIENT_EXPORT response::Value Variable<response::IdType>::serialize(
93+
response::IdType&& value);
94+
template <>
95+
GRAPHQLCLIENT_EXPORT response::Value Variable<response::Value>::serialize(response::Value&& value);
96+
#endif // GRAPHQL_DLLEXPORTS
97+
98+
namespace {
99+
73100
// These types are used as scalar variables even though they are represented with a class.
74101
template <typename Type>
75102
concept ScalarVariableClass = std::is_same_v<Type, std::string> || std::is_same_v<Type,
@@ -117,16 +144,13 @@ struct ModifiedVariable
117144
using type = U;
118145
};
119146

120-
// Serialize a single value to the variables document.
121-
[[nodiscard]] static response::Value serialize(Type&& value);
122-
123147
// Peel off the none modifier. If it's included, it should always be last in the list.
124148
template <TypeModifier Modifier = TypeModifier::None, TypeModifier... Other>
125149
[[nodiscard]] static inline response::Value serialize(
126150
Type&& value) requires OnlyNoneModifiers<Modifier, Other...>
127151
{
128152
// Just call through to the non-template method without the modifiers.
129-
return serialize(std::move(value));
153+
return Variable<Type>::serialize(std::move(value));
130154
}
131155

132156
// Peel off nullable modifiers.
@@ -220,24 +244,35 @@ using BooleanVariable = ModifiedVariable<bool>;
220244
using IdVariable = ModifiedVariable<response::IdType>;
221245
using ScalarVariable = ModifiedVariable<response::Value>;
222246

247+
} // namespace
248+
249+
// Parse a single response output value. This is the inverse of Variable for output types instead of
250+
// input types.
251+
template <typename Type>
252+
struct Response
253+
{
254+
// Parse a single value of the response document.
255+
[[nodiscard]] static Type parse(response::Value&& response);
256+
};
257+
223258
#ifdef GRAPHQL_DLLEXPORTS
224259
// Export all of the built-in converters
225260
template <>
226-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<int>::serialize(int&& value);
261+
GRAPHQLCLIENT_EXPORT int Response<int>::parse(response::Value&& response);
227262
template <>
228-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<double>::serialize(double&& value);
263+
GRAPHQLCLIENT_EXPORT double Response<double>::parse(response::Value&& response);
229264
template <>
230-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<std::string>::serialize(std::string&& value);
265+
GRAPHQLCLIENT_EXPORT std::string Response<std::string>::parse(response::Value&& response);
231266
template <>
232-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<bool>::serialize(bool&& value);
267+
GRAPHQLCLIENT_EXPORT bool Response<bool>::parse(response::Value&& response);
233268
template <>
234-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<response::IdType>::serialize(
235-
response::IdType&& value);
269+
GRAPHQLCLIENT_EXPORT response::IdType Response<response::IdType>::parse(response::Value&& response);
236270
template <>
237-
GRAPHQLCLIENT_EXPORT response::Value ModifiedVariable<response::Value>::serialize(
238-
response::Value&& value);
271+
GRAPHQLCLIENT_EXPORT response::Value Response<response::Value>::parse(response::Value&& response);
239272
#endif // GRAPHQL_DLLEXPORTS
240273

274+
namespace {
275+
241276
// Parse response output values with chained type modifiers that add nullable or list wrappers.
242277
// This is the inverse of ModifiedVariable for output types instead of input types.
243278
template <typename Type>
@@ -259,15 +294,12 @@ struct ModifiedResponse
259294
using type = U;
260295
};
261296

262-
// Parse a single value of the response document.
263-
[[nodiscard]] static Type parse(response::Value&& response);
264-
265297
// Peel off the none modifier. If it's included, it should always be last in the list.
266298
template <TypeModifier Modifier = TypeModifier::None, TypeModifier... Other>
267299
[[nodiscard]] static inline Type parse(
268300
response::Value&& response) requires OnlyNoneModifiers<Modifier, Other...>
269301
{
270-
return parse(std::move(response));
302+
return Response<Type>::parse(std::move(response));
271303
}
272304

273305
// Peel off nullable modifiers.
@@ -318,24 +350,7 @@ using BooleanResponse = ModifiedResponse<bool>;
318350
using IdResponse = ModifiedResponse<response::IdType>;
319351
using ScalarResponse = ModifiedResponse<response::Value>;
320352

321-
#ifdef GRAPHQL_DLLEXPORTS
322-
// Export all of the built-in converters
323-
template <>
324-
GRAPHQLCLIENT_EXPORT int ModifiedResponse<int>::parse(response::Value&& response);
325-
template <>
326-
GRAPHQLCLIENT_EXPORT double ModifiedResponse<double>::parse(response::Value&& response);
327-
template <>
328-
GRAPHQLCLIENT_EXPORT std::string ModifiedResponse<std::string>::parse(response::Value&& response);
329-
template <>
330-
GRAPHQLCLIENT_EXPORT bool ModifiedResponse<bool>::parse(response::Value&& response);
331-
template <>
332-
GRAPHQLCLIENT_EXPORT response::IdType ModifiedResponse<response::IdType>::parse(
333-
response::Value&& response);
334-
template <>
335-
GRAPHQLCLIENT_EXPORT response::Value ModifiedResponse<response::Value>::parse(
336-
response::Value&& response);
337-
#endif // GRAPHQL_DLLEXPORTS
338-
353+
} // namespace
339354
} // namespace graphql::client
340355

341356
#endif // GRAPHQLCLIENT_H

samples/client/benchmark/BenchmarkClient.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const peg::ast& GetRequestObject() noexcept
6464
using namespace benchmark;
6565

6666
template <>
67-
query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo ModifiedResponse<query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo>::parse(response::Value&& response)
67+
query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo Response<query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo>::parse(response::Value&& response)
6868
{
6969
query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo result;
7070

@@ -86,7 +86,7 @@ query::Query::Response::appointments_AppointmentConnection::pageInfo_PageInfo Mo
8686
}
8787

8888
template <>
89-
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment ModifiedResponse<query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment>::parse(response::Value&& response)
89+
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment Response<query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment>::parse(response::Value&& response)
9090
{
9191
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment result;
9292

@@ -123,7 +123,7 @@ query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdg
123123
}
124124

125125
template <>
126-
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge ModifiedResponse<query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge>::parse(response::Value&& response)
126+
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge Response<query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge>::parse(response::Value&& response)
127127
{
128128
query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdge result;
129129

@@ -145,7 +145,7 @@ query::Query::Response::appointments_AppointmentConnection::edges_AppointmentEdg
145145
}
146146

147147
template <>
148-
query::Query::Response::appointments_AppointmentConnection ModifiedResponse<query::Query::Response::appointments_AppointmentConnection>::parse(response::Value&& response)
148+
query::Query::Response::appointments_AppointmentConnection Response<query::Query::Response::appointments_AppointmentConnection>::parse(response::Value&& response)
149149
{
150150
query::Query::Response::appointments_AppointmentConnection result;
151151

samples/client/multiple/MultipleQueriesClient.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ CompleteTaskInput& CompleteTaskInput::operator=(CompleteTaskInput&& other) noexc
173173
using namespace multiple;
174174

175175
template <>
176-
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment ModifiedResponse<query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment>::parse(response::Value&& response)
176+
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment Response<query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment>::parse(response::Value&& response)
177177
{
178178
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge::node_Appointment result;
179179

@@ -215,7 +215,7 @@ query::Appointments::Response::appointments_AppointmentConnection::edges_Appoint
215215
}
216216

217217
template <>
218-
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge ModifiedResponse<query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge>::parse(response::Value&& response)
218+
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge Response<query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge>::parse(response::Value&& response)
219219
{
220220
query::Appointments::Response::appointments_AppointmentConnection::edges_AppointmentEdge result;
221221

@@ -237,7 +237,7 @@ query::Appointments::Response::appointments_AppointmentConnection::edges_Appoint
237237
}
238238

239239
template <>
240-
query::Appointments::Response::appointments_AppointmentConnection ModifiedResponse<query::Appointments::Response::appointments_AppointmentConnection>::parse(response::Value&& response)
240+
query::Appointments::Response::appointments_AppointmentConnection Response<query::Appointments::Response::appointments_AppointmentConnection>::parse(response::Value&& response)
241241
{
242242
query::Appointments::Response::appointments_AppointmentConnection result;
243243

@@ -291,7 +291,7 @@ Response parseResponse(response::Value&& response)
291291
} // namespace query::Appointments
292292

293293
template <>
294-
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task ModifiedResponse<query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task>::parse(response::Value&& response)
294+
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task Response<query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task>::parse(response::Value&& response)
295295
{
296296
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task result;
297297

@@ -328,7 +328,7 @@ query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge::node_Task Modified
328328
}
329329

330330
template <>
331-
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge ModifiedResponse<query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge>::parse(response::Value&& response)
331+
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge Response<query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge>::parse(response::Value&& response)
332332
{
333333
query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge result;
334334

@@ -350,7 +350,7 @@ query::Tasks::Response::tasks_TaskConnection::edges_TaskEdge ModifiedResponse<qu
350350
}
351351

352352
template <>
353-
query::Tasks::Response::tasks_TaskConnection ModifiedResponse<query::Tasks::Response::tasks_TaskConnection>::parse(response::Value&& response)
353+
query::Tasks::Response::tasks_TaskConnection Response<query::Tasks::Response::tasks_TaskConnection>::parse(response::Value&& response)
354354
{
355355
query::Tasks::Response::tasks_TaskConnection result;
356356

@@ -404,7 +404,7 @@ Response parseResponse(response::Value&& response)
404404
} // namespace query::Tasks
405405

406406
template <>
407-
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::node_Folder ModifiedResponse<query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::node_Folder>::parse(response::Value&& response)
407+
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::node_Folder Response<query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::node_Folder>::parse(response::Value&& response)
408408
{
409409
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::node_Folder result;
410410

@@ -441,7 +441,7 @@ query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge::
441441
}
442442

443443
template <>
444-
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge ModifiedResponse<query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge>::parse(response::Value&& response)
444+
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge Response<query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge>::parse(response::Value&& response)
445445
{
446446
query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge result;
447447

@@ -463,7 +463,7 @@ query::UnreadCounts::Response::unreadCounts_FolderConnection::edges_FolderEdge M
463463
}
464464

465465
template <>
466-
query::UnreadCounts::Response::unreadCounts_FolderConnection ModifiedResponse<query::UnreadCounts::Response::unreadCounts_FolderConnection>::parse(response::Value&& response)
466+
query::UnreadCounts::Response::unreadCounts_FolderConnection Response<query::UnreadCounts::Response::unreadCounts_FolderConnection>::parse(response::Value&& response)
467467
{
468468
query::UnreadCounts::Response::unreadCounts_FolderConnection result;
469469

@@ -524,7 +524,7 @@ static const std::array<std::pair<std::string_view, TaskState>, 4> s_valuesTaskS
524524
};
525525

526526
template <>
527-
TaskState ModifiedResponse<TaskState>::parse(response::Value&& value)
527+
TaskState Response<TaskState>::parse(response::Value&& value)
528528
{
529529
if (!value.maybe_enum())
530530
{
@@ -544,7 +544,7 @@ TaskState ModifiedResponse<TaskState>::parse(response::Value&& value)
544544
}
545545

546546
template <>
547-
query::Miscellaneous::Response::anyType_UnionType ModifiedResponse<query::Miscellaneous::Response::anyType_UnionType>::parse(response::Value&& response)
547+
query::Miscellaneous::Response::anyType_UnionType Response<query::Miscellaneous::Response::anyType_UnionType>::parse(response::Value&& response)
548548
{
549549
query::Miscellaneous::Response::anyType_UnionType result;
550550

@@ -645,7 +645,7 @@ static const std::array<std::string_view, 4> s_namesTaskState = {
645645
};
646646

647647
template <>
648-
response::Value ModifiedVariable<TaskState>::serialize(TaskState&& value)
648+
response::Value Variable<TaskState>::serialize(TaskState&& value)
649649
{
650650
response::Value result { response::Type::EnumValue };
651651

@@ -655,7 +655,7 @@ response::Value ModifiedVariable<TaskState>::serialize(TaskState&& value)
655655
}
656656

657657
template <>
658-
response::Value ModifiedVariable<CompleteTaskInput>::serialize(CompleteTaskInput&& inputValue)
658+
response::Value Variable<CompleteTaskInput>::serialize(CompleteTaskInput&& inputValue)
659659
{
660660
response::Value result { response::Type::Map };
661661

@@ -668,7 +668,7 @@ response::Value ModifiedVariable<CompleteTaskInput>::serialize(CompleteTaskInput
668668
}
669669

670670
template <>
671-
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task ModifiedResponse<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse(response::Value&& response)
671+
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task Response<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse(response::Value&& response)
672672
{
673673
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task result;
674674

@@ -700,7 +700,7 @@ mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::com
700700
}
701701

702702
template <>
703-
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload ModifiedResponse<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload>::parse(response::Value&& response)
703+
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload Response<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload>::parse(response::Value&& response)
704704
{
705705
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload result;
706706

samples/client/mutate/MutateClient.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ static const std::array<std::string_view, 4> s_namesTaskState = {
113113
};
114114

115115
template <>
116-
response::Value ModifiedVariable<TaskState>::serialize(TaskState&& value)
116+
response::Value Variable<TaskState>::serialize(TaskState&& value)
117117
{
118118
response::Value result { response::Type::EnumValue };
119119

@@ -123,7 +123,7 @@ response::Value ModifiedVariable<TaskState>::serialize(TaskState&& value)
123123
}
124124

125125
template <>
126-
response::Value ModifiedVariable<CompleteTaskInput>::serialize(CompleteTaskInput&& inputValue)
126+
response::Value Variable<CompleteTaskInput>::serialize(CompleteTaskInput&& inputValue)
127127
{
128128
response::Value result { response::Type::Map };
129129

@@ -143,7 +143,7 @@ static const std::array<std::pair<std::string_view, TaskState>, 4> s_valuesTaskS
143143
};
144144

145145
template <>
146-
TaskState ModifiedResponse<TaskState>::parse(response::Value&& value)
146+
TaskState Response<TaskState>::parse(response::Value&& value)
147147
{
148148
if (!value.maybe_enum())
149149
{
@@ -163,7 +163,7 @@ TaskState ModifiedResponse<TaskState>::parse(response::Value&& value)
163163
}
164164

165165
template <>
166-
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task ModifiedResponse<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse(response::Value&& response)
166+
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task Response<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse(response::Value&& response)
167167
{
168168
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::completedTask_Task result;
169169

@@ -195,7 +195,7 @@ mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload::com
195195
}
196196

197197
template <>
198-
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload ModifiedResponse<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload>::parse(response::Value&& response)
198+
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload Response<mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload>::parse(response::Value&& response)
199199
{
200200
mutation::CompleteTaskMutation::Response::completedTask_CompleteTaskPayload result;
201201

0 commit comments

Comments
 (0)