@@ -1109,13 +1109,40 @@ struct ModifiedResult
1109
1109
co_await params.launch ;
1110
1110
1111
1111
auto awaitedResult = co_await std::move (result);
1112
+ using vector_type = std::decay_t <decltype (awaitedResult)>;
1113
+
1114
+ // Shortcut for std::vector of non-awaitable scalars. No need to go async. Results are ready.
1115
+ if constexpr (std::is_floating_point_v<typename vector_type::value_type>
1116
+ || std::is_integral_v<typename vector_type::value_type >// also for bool
1117
+ || std::is_same<std::string, typename vector_type::value_type>::value
1118
+ || std::is_same<response::IdType, typename vector_type::value_type>::value)
1119
+ {
1120
+ ResolverResult document;
1121
+ document.data .push_back (response::ValueToken::StartArray {});
1122
+ document.data .push_back (response::ValueToken::Reserve { awaitedResult.size () });
1123
+
1124
+ for (auto & r : awaitedResult)
1125
+ {
1126
+ if constexpr (std::is_same<bool , typename vector_type::value_type>::value)
1127
+ document.data .append (response::ValueToken::BoolValue { r });
1128
+ else if constexpr (std::is_integral_v<typename vector_type::value_type>)
1129
+ document.data .append (response::ValueToken::IntValue { std::move (r) });
1130
+ else if constexpr (std::is_floating_point_v<typename vector_type::value_type>)
1131
+ document.data .append (response::ValueToken::FloatValue { std::move (r) });
1132
+ else if constexpr (std::is_same<response::IdType,typename vector_type::value_type>::value)
1133
+ document.data .append (response::ValueToken::IdValue { std::move (r) });
1134
+ else
1135
+ document.data .append (response::ValueToken::StringValue { std::move (r) });
1136
+ }
1137
+ document.data .push_back (response::ValueToken::EndArray {});
1138
+ co_return document;
1139
+ }
1112
1140
1113
1141
children.reserve (awaitedResult.size ());
1114
1142
params.errorPath = std::make_optional (
1115
1143
field_path { parentPath ? std::make_optional (std::cref (*parentPath)) : std::nullopt,
1116
1144
path_segment { std::size_t { 0 } } });
1117
1145
1118
- using vector_type = std::decay_t <decltype (awaitedResult)>;
1119
1146
1120
1147
if constexpr (!std::is_same_v<std::decay_t <typename vector_type::reference>,
1121
1148
typename vector_type::value_type>)
0 commit comments