@@ -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
19911999std::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
20342023std::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
20852089std::string Generator::getIntrospectionType (const std::string& type, const TypeModifierStack& modifiers) const noexcept
0 commit comments