Skip to content

Commit 2f536bc

Browse files
committed
Refactor templates to remove dummy types
1 parent a0404bf commit 2f536bc

File tree

8 files changed

+314
-320
lines changed

8 files changed

+314
-320
lines changed

GraphQLService.h

Lines changed: 143 additions & 155 deletions
Large diffs are not rendered by default.

SchemaGenerator.cpp

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,20 +1224,23 @@ template <>
12241224
{
12251225
sourceFile << R"cpp( auto value)cpp" << fieldName
12261226
<< R"cpp( = )cpp" << getArgumentAccessType(inputField)
1227-
<< R"cpp(::require(")cpp" << inputField.name
1227+
<< R"cpp(::require)cpp" << getTypeModifiers(inputField.modifiers)
1228+
<< R"cpp((")cpp" << inputField.name
12281229
<< R"cpp(", value.as_object());
12291230
)cpp";
12301231
}
12311232
else
12321233
{
12331234
sourceFile << R"cpp( auto pair)cpp" << fieldName
12341235
<< R"cpp( = )cpp" << getArgumentAccessType(inputField)
1235-
<< R"cpp(::find(")cpp" << inputField.name
1236+
<< R"cpp(::find)cpp" << getTypeModifiers(inputField.modifiers)
1237+
<< R"cpp((")cpp" << inputField.name
12361238
<< R"cpp(", value.as_object());
12371239
auto value)cpp" << fieldName << R"cpp( = (pair)cpp" << fieldName << R"cpp(.second
12381240
? std::move(pair)cpp" << fieldName << R"cpp(.first)
12391241
: )cpp" << getArgumentAccessType(inputField)
1240-
<< R"cpp(::require(")cpp" << inputField.name
1242+
<< R"cpp(::require)cpp" << getTypeModifiers(inputField.modifiers)
1243+
<< R"cpp((")cpp" << inputField.name
12411244
<< R"cpp(", defaultValue.as_object()));
12421245
)cpp";
12431246
}
@@ -1447,20 +1450,23 @@ web::json::value )cpp" << objectType.type
14471450
{
14481451
sourceFile << R"cpp( auto arg)cpp" << argumentName
14491452
<< R"cpp( = )cpp" << getArgumentAccessType(argument)
1450-
<< R"cpp(::require(")cpp" << argument.name
1453+
<< R"cpp(::require)cpp" << getTypeModifiers(argument.modifiers)
1454+
<< R"cpp((")cpp" << argument.name
14511455
<< R"cpp(", params.arguments);
14521456
)cpp";
14531457
}
14541458
else
14551459
{
14561460
sourceFile << R"cpp( auto pair)cpp" << argumentName
14571461
<< R"cpp( = )cpp" << getArgumentAccessType(argument)
1458-
<< R"cpp(::find(")cpp" << argument.name
1462+
<< R"cpp(::find)cpp" << getTypeModifiers(argument.modifiers)
1463+
<< R"cpp((")cpp" << argument.name
14591464
<< R"cpp(", params.arguments);
14601465
auto arg)cpp" << argumentName << R"cpp( = (pair)cpp" << argumentName << R"cpp(.second
14611466
? std::move(pair)cpp" << argumentName << R"cpp(.first)
14621467
: )cpp" << getArgumentAccessType(argument)
1463-
<< R"cpp(::require(")cpp" << argument.name
1468+
<< R"cpp(::require)cpp" << getTypeModifiers(argument.modifiers)
1469+
<< R"cpp((")cpp" << argument.name
14641470
<< R"cpp(", defaultArguments.as_object()));
14651471
)cpp";
14661472
}
@@ -1491,7 +1497,9 @@ web::json::value )cpp" << objectType.type
14911497

14921498
sourceFile << R"cpp();
14931499
1494-
return )cpp" << getResultAccessType(outputField) << R"cpp(::convert(result, std::move(params));
1500+
return )cpp" << getResultAccessType(outputField)
1501+
<< R"cpp(::convert)cpp" << getTypeModifiers(outputField.modifiers)
1502+
<< R"cpp((result, std::move(params));
14951503
}
14961504
)cpp";
14971505
}
@@ -1519,7 +1527,7 @@ web::json::value )cpp" << objectType.type
15191527
<< R"cpp(::resolve__type(service::ResolverParams&& params)
15201528
{
15211529
auto argName = service::ModifiedArgument<std::string>::require("name", params.arguments);
1522-
auto result = service::ModifiedResult<introspection::object::__Type, service::TypeModifier::Nullable>::convert(_schema->LookupType(argName), std::move(params));
1530+
auto result = service::ModifiedResult<introspection::object::__Type>::convert<service::TypeModifier::Nullable>(_schema->LookupType(argName), std::move(params));
15231531
15241532
return result;
15251533
}
@@ -1990,11 +1998,9 @@ Operations::Operations()cpp";
19901998

19911999
std::string Generator::getArgumentAccessType(const InputField& argument) const noexcept
19922000
{
1993-
size_t templateCount = 0;
19942001
std::ostringstream argumentType;
19952002

19962003
argumentType << R"cpp(service::ModifiedArgument<)cpp";
1997-
++templateCount;
19982004

19992005
switch (argument.fieldType)
20002006
{
@@ -2009,35 +2015,16 @@ std::string Generator::getArgumentAccessType(const InputField& argument) const n
20092015
break;
20102016
}
20112017

2012-
for (auto modifier : argument.modifiers)
2013-
{
2014-
switch (modifier)
2015-
{
2016-
case service::TypeModifier::Nullable:
2017-
argumentType << R"cpp(, service::TypeModifier::Nullable)cpp";
2018-
break;
2019-
2020-
case service::TypeModifier::List:
2021-
argumentType << R"cpp(, service::TypeModifier::List)cpp";
2022-
break;
2023-
}
2024-
}
2025-
2026-
for (size_t i = 0; i < templateCount; ++i)
2027-
{
2028-
argumentType << R"cpp(>)cpp";
2029-
}
2018+
argumentType << R"cpp(>)cpp";
20302019

20312020
return argumentType.str();
20322021
}
20332022

20342023
std::string Generator::getResultAccessType(const OutputField& result) const noexcept
20352024
{
2036-
size_t templateCount = 0;
20372025
std::ostringstream resultType;
20382026

20392027
resultType << R"cpp(service::ModifiedResult<)cpp";
2040-
++templateCount;
20412028

20422029
switch (result.fieldType)
20432030
{
@@ -2057,29 +2044,46 @@ std::string Generator::getResultAccessType(const OutputField& result) const noex
20572044
break;
20582045
}
20592046

2060-
for (auto modifier : result.modifiers)
2047+
resultType << R"cpp(>)cpp";
2048+
2049+
return resultType.str();
2050+
}
2051+
2052+
std::string Generator::getTypeModifiers(const TypeModifierStack& modifiers) const noexcept
2053+
{
2054+
bool firstValue = true;
2055+
std::ostringstream typeModifiers;
2056+
2057+
for (auto modifier : modifiers)
20612058
{
2059+
if (firstValue)
2060+
{
2061+
typeModifiers << R"cpp(<)cpp";
2062+
firstValue = false;
2063+
}
2064+
else
2065+
{
2066+
typeModifiers << R"cpp(, )cpp";
2067+
}
2068+
20622069
switch (modifier)
20632070
{
20642071
case service::TypeModifier::Nullable:
2065-
resultType << R"cpp(, service::TypeModifier::Nullable)cpp";
2072+
typeModifiers << R"cpp(service::TypeModifier::Nullable)cpp";
20662073
break;
20672074

20682075
case service::TypeModifier::List:
2069-
resultType << R"cpp(, service::TypeModifier::List)cpp";
2070-
break;
2071-
2072-
default:
2076+
typeModifiers << R"cpp(service::TypeModifier::List)cpp";
20732077
break;
20742078
}
20752079
}
20762080

2077-
for (size_t i = 0; i < templateCount; ++i)
2081+
if (!firstValue)
20782082
{
2079-
resultType << R"cpp(>)cpp";
2083+
typeModifiers << R"cpp(>)cpp";
20802084
}
20812085

2082-
return resultType.str();
2086+
return typeModifiers.str();
20832087
}
20842088

20852089
std::string Generator::getIntrospectionType(const std::string& type, const TypeModifierStack& modifiers) const noexcept

SchemaGenerator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ class Generator : private ast::visitor::AstVisitor
237237
bool outputSource() const noexcept;
238238
std::string getArgumentAccessType(const InputField& argument) const noexcept;
239239
std::string getResultAccessType(const OutputField& result) const noexcept;
240+
std::string getTypeModifiers(const TypeModifierStack& modifiers) const noexcept;
240241
std::string getIntrospectionType(const std::string& type, const TypeModifierStack& modifiers) const noexcept;
241242

242243
static const std::string s_introspectionNamespace;

Today.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ struct EdgeConstraints
165165
{ _XPLATSTR("after"), *after }
166166
});
167167

168-
auto afterId = service::IdArgument<>::require("after", value.as_object());
168+
auto afterId = service::IdArgument::require("after", value.as_object());
169169
auto itrAfter = std::find_if(itrFirst, itrLast,
170170
[&afterId](const std::shared_ptr<_Object>& entry)
171171
{
@@ -184,7 +184,7 @@ struct EdgeConstraints
184184
{ _XPLATSTR("before"), *before }
185185
});
186186

187-
auto beforeId = service::IdArgument<>::require("before", value.as_object());
187+
auto beforeId = service::IdArgument::require("before", value.as_object());
188188
auto itrBefore = std::find_if(itrFirst, itrLast,
189189
[&beforeId](const std::shared_ptr<_Object>& entry)
190190
{

0 commit comments

Comments
 (0)