Skip to content

Commit f8e5431

Browse files
committed
Fix #161 implement parseResponse
1 parent f4c99d2 commit f8e5431

File tree

5 files changed

+587
-31
lines changed

5 files changed

+587
-31
lines changed

include/ClientGenerator.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ class Generator
4141
const std::string& getClientNamespace() const noexcept;
4242
const std::string& getRequestNamespace() const noexcept;
4343
const std::string& getFullNamespace() const noexcept;
44-
std::string getResponseFieldCppType(const ResponseField& responseField) const noexcept;
44+
std::string getResponseFieldCppType(
45+
const ResponseField& responseField, std::string_view currentScope = {}) const noexcept;
4546

4647
bool outputHeader() const noexcept;
4748
void outputRequestComment(std::ostream& headerFile) const noexcept;
@@ -51,6 +52,8 @@ class Generator
5152

5253
bool outputSource() const noexcept;
5354
void outputGetRequestImplementation(std::ostream& sourceFile) const noexcept;
55+
bool outputModifiedResponseImplementation(std::ostream& sourceFile,
56+
const std::string& outerScope, const ResponseField& responseField) const noexcept;
5457
static std::string getTypeModifierList(const TypeModifierStack& modifiers) noexcept;
5558

5659
const SchemaLoader _schemaLoader;

samples/client/MutateClient.cpp

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ response::Value ModifiedVariable<Variables::CompleteTaskInput>::serialize(Variab
4747
return result;
4848
}
4949

50-
TaskState parseTaskState(const response::Value& value)
50+
TaskState ModifiedResponse<TaskState>::parse(response::Value&& value)
5151
{
5252
if (!value.maybe_enum())
5353
{
5454
throw std::logic_error { "not a valid TaskState value" };
5555
}
5656

57-
const auto itr = std::find(s_namesTaskState.cbegin(), s_namesTaskState.cend(), value.get<response::StringType>());
57+
const auto itr = std::find(s_namesTaskState.cbegin(), s_namesTaskState.cend(), value.release<response::StringType>());
5858

5959
if (itr == s_namesTaskState.cend())
6060
{
@@ -64,6 +64,63 @@ TaskState parseTaskState(const response::Value& value)
6464
return static_cast<TaskState>(itr - s_namesTaskState.cbegin());
6565
}
6666

67+
Response::completedTask_CompleteTaskPayload::completedTask_Task ModifiedResponse<Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse(response::Value&& response)
68+
{
69+
Response::completedTask_CompleteTaskPayload::completedTask_Task result;
70+
71+
if (response.type() == response::Type::Map)
72+
{
73+
auto members = response.release<response::MapType>();
74+
75+
for (auto& member : members)
76+
{
77+
if (member.first == R"js(completedTaskId)js"sv)
78+
{
79+
result.completedTaskId = ModifiedResponse<response::IdType>::parse(std::move(member.second));
80+
continue;
81+
}
82+
if (member.first == R"js(title)js"sv)
83+
{
84+
result.title = ModifiedResponse<response::StringType>::parse<TypeModifier::Nullable>(std::move(member.second));
85+
continue;
86+
}
87+
if (member.first == R"js(isComplete)js"sv)
88+
{
89+
result.isComplete = ModifiedResponse<response::BooleanType>::parse(std::move(member.second));
90+
continue;
91+
}
92+
}
93+
}
94+
95+
return result;
96+
}
97+
98+
Response::completedTask_CompleteTaskPayload ModifiedResponse<Response::completedTask_CompleteTaskPayload>::parse(response::Value&& response)
99+
{
100+
Response::completedTask_CompleteTaskPayload result;
101+
102+
if (response.type() == response::Type::Map)
103+
{
104+
auto members = response.release<response::MapType>();
105+
106+
for (auto& member : members)
107+
{
108+
if (member.first == R"js(completedTask)js"sv)
109+
{
110+
result.completedTask = ModifiedResponse<Response::completedTask_CompleteTaskPayload::completedTask_Task>::parse<TypeModifier::Nullable>(std::move(member.second));
111+
continue;
112+
}
113+
if (member.first == R"js(clientMutationId)js"sv)
114+
{
115+
result.clientMutationId = ModifiedResponse<response::StringType>::parse<TypeModifier::Nullable>(std::move(member.second));
116+
continue;
117+
}
118+
}
119+
}
120+
121+
return result;
122+
}
123+
67124
namespace mutation::CompleteTaskMutation {
68125

69126
const std::string& GetRequestText() noexcept
@@ -114,7 +171,19 @@ Response parseResponse(response::Value&& response)
114171
{
115172
Response result;
116173

117-
// completedTask_CompleteTaskPayload completedTask;
174+
if (response.type() == response::Type::Map)
175+
{
176+
auto members = response.release<response::MapType>();
177+
178+
for (auto& member : members)
179+
{
180+
if (member.first == R"js(completedTask)js"sv)
181+
{
182+
result.completedTask = ModifiedResponse<Response::completedTask_CompleteTaskPayload>::parse(std::move(member.second));
183+
continue;
184+
}
185+
}
186+
}
118187

119188
return result;
120189
}

0 commit comments

Comments
 (0)