Skip to content

Commit 349f4c0

Browse files
author
Rafał Hibner
committed
Fix client list generation
1 parent b1ff555 commit 349f4c0

File tree

4 files changed

+46
-30
lines changed

4 files changed

+46
-30
lines changed

samples/client/query/QueryClient.cpp

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const std::string& GetRequestText() noexcept
3030
appointments {
3131
edges {
3232
node {
33-
array
33+
array
3434
id
3535
subject
3636
when
@@ -79,6 +79,7 @@ const std::string& GetRequestText() noexcept
7979
subject
8080
when
8181
isNow
82+
array
8283
}
8384
}
8485
@@ -437,6 +438,11 @@ graphql::query::client::query::Query::Response::anyType_UnionType Response<graph
437438
result.isNow = ModifiedResponse<bool>::parse(std::move(member.second));
438439
continue;
439440
}
441+
if (member.first == R"js(array)js"sv)
442+
{
443+
result.array = ModifiedResponse<response::IdType>::parse<TypeModifier::List>(std::move(member.second));
444+
continue;
445+
}
440446
}
441447
}
442448

@@ -501,6 +507,9 @@ struct ResponseVisitor::impl
501507
Member_anyType_0_subject,
502508
Member_anyType_0_when,
503509
Member_anyType_0_isNow,
510+
Member_anyType_0_array,
511+
Member_anyType_0_array_0,
512+
Member_anyType_0_array_0_,
504513
Member_default_,
505514
Complete,
506515
};
@@ -679,6 +688,10 @@ void ResponseVisitor::add_value([[maybe_unused]] std::shared_ptr<const response:
679688
_pimpl->response.anyType.back()->isNow = ModifiedResponse<bool>::parse(response::Value { *value });
680689
break;
681690

691+
case impl::VisitorState::Member_anyType_0_array_0:
692+
_pimpl->response.anyType.back()->array.push_back(ModifiedResponse<response::IdType>::parse(response::Value { *value }));
693+
break;
694+
682695
case impl::VisitorState::Member_default_:
683696
_pimpl->state = impl::VisitorState::Start;
684697
_pimpl->response.default_ = ModifiedResponse<std::string>::parse<TypeModifier::Nullable>(response::Value { *value });
@@ -701,7 +714,7 @@ void ResponseVisitor::reserve([[maybe_unused]] std::size_t count)
701714
break;
702715

703716
case impl::VisitorState::Member_appointments_edges_0_node_array_0:
704-
_pimpl->response.appointments.edges->back()->->back()->node->->array.reserve(count);
717+
_pimpl->response.appointments.edges->back()->node->array.reserve(count);
705718
break;
706719

707720
case impl::VisitorState::Member_tasks_edges_0:
@@ -716,6 +729,10 @@ void ResponseVisitor::reserve([[maybe_unused]] std::size_t count)
716729
_pimpl->response.anyType.reserve(count);
717730
break;
718731

732+
case impl::VisitorState::Member_anyType_0_array_0:
733+
_pimpl->response.anyType.back()->array.reserve(count);
734+
break;
735+
719736
case impl::VisitorState::Complete:
720737
break;
721738

@@ -765,6 +782,11 @@ void ResponseVisitor::start_object()
765782
_pimpl->response.anyType.push_back(std::make_optional<Response::anyType_UnionType>({}));
766783
break;
767784

785+
case impl::VisitorState::Member_anyType_0_array_0:
786+
_pimpl->state = impl::VisitorState::Member_anyType_0_array_0_;
787+
_pimpl->response.anyType.back()->array.push_back({});
788+
break;
789+
768790
case impl::VisitorState::Complete:
769791
break;
770792

@@ -940,6 +962,10 @@ void ResponseVisitor::add_member([[maybe_unused]] std::string&& key)
940962
{
941963
_pimpl->state = impl::VisitorState::Member_anyType_0_isNow;
942964
}
965+
else if (key == "array"sv)
966+
{
967+
_pimpl->state = impl::VisitorState::Member_anyType_0_array;
968+
}
943969
break;
944970

945971
case impl::VisitorState::Complete:
@@ -1029,6 +1055,10 @@ void ResponseVisitor::start_array()
10291055
_pimpl->state = impl::VisitorState::Member_anyType_0;
10301056
break;
10311057

1058+
case impl::VisitorState::Member_anyType_0_array:
1059+
_pimpl->state = impl::VisitorState::Member_anyType_0_array_0;
1060+
break;
1061+
10321062
case impl::VisitorState::Complete:
10331063
break;
10341064

@@ -1061,6 +1091,10 @@ void ResponseVisitor::end_array()
10611091
_pimpl->state = impl::VisitorState::Start;
10621092
break;
10631093

1094+
case impl::VisitorState::Member_anyType_0_array_0:
1095+
_pimpl->state = impl::VisitorState::Member_anyType_0_;
1096+
break;
1097+
10641098
case impl::VisitorState::Complete:
10651099
break;
10661100

@@ -1264,6 +1298,10 @@ void ResponseVisitor::add_id([[maybe_unused]] response::IdType&& value)
12641298
_pimpl->response.anyType.back()->id = std::move(value);
12651299
break;
12661300

1301+
case impl::VisitorState::Member_anyType_0_array_0:
1302+
_pimpl->response.anyType.back()->array.push_back(std::move(value));
1303+
break;
1304+
12671305
case impl::VisitorState::Complete:
12681306
break;
12691307

samples/client/query/QueryClient.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace graphql::query {
3333
/// appointments {
3434
/// edges {
3535
/// node {
36-
/// array
36+
/// array
3737
/// id
3838
/// subject
3939
/// when
@@ -82,6 +82,7 @@ namespace graphql::query {
8282
/// subject
8383
/// when
8484
/// isNow
85+
/// array
8586
/// }
8687
/// }
8788
///
@@ -186,6 +187,7 @@ struct [[nodiscard("unnecessary construction")]] Response
186187
std::optional<std::string> subject {};
187188
std::optional<response::Value> when {};
188189
bool isNow {};
190+
std::vector<response::IdType> array {};
189191
};
190192

191193
appointments_AppointmentConnection appointments {};

samples/client/query/query.today.graphql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ query {
55
appointments {
66
edges {
77
node {
8-
array
8+
array
99
id
1010
subject
1111
when
@@ -54,6 +54,7 @@ query {
5454
subject
5555
when
5656
isNow
57+
array
5758
}
5859
}
5960

src/ClientGenerator.cpp

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2211,32 +2211,7 @@ void Generator::outputResponseFieldVisitorReserve(std::ostream& sourceFile,
22112211
case introspection::TypeKind::INTERFACE:
22122212
case introspection::TypeKind::UNION:
22132213
{
2214-
dereference = true;
2215-
2216-
for (auto modifier : responseField.modifiers)
2217-
{
2218-
switch (modifier)
2219-
{
2220-
case service::TypeModifier::None:
2221-
break;
2222-
2223-
case service::TypeModifier::Nullable:
2224-
accessor.append(R"cpp(->)cpp");
2225-
dereference = false;
2226-
break;
2227-
2228-
case service::TypeModifier::List:
2229-
if (dereference)
2230-
{
2231-
accessor.append(R"cpp(.)cpp");
2232-
}
2233-
2234-
accessor.append(R"cpp(back())cpp");
2235-
dereference = true;
2236-
break;
2237-
}
2238-
}
2239-
2214+
22402215
if (dereference)
22412216
{
22422217
accessor.append(R"cpp(.)cpp");

0 commit comments

Comments
 (0)