@@ -26,6 +26,7 @@ Query::Query()
2626 { R"gql( tasks)gql" sv, [this ](service::ResolverParams&& params) { return resolveTasks (std::move (params)); } },
2727 { R"gql( __type)gql" sv, [this ](service::ResolverParams&& params) { return resolve_type (std::move (params)); } },
2828 { R"gql( nested)gql" sv, [this ](service::ResolverParams&& params) { return resolveNested (std::move (params)); } },
29+ { R"gql( anyType)gql" sv, [this ](service::ResolverParams&& params) { return resolveAnyType (std::move (params)); } },
2930 { R"gql( __schema)gql" sv, [this ](service::ResolverParams&& params) { return resolve_schema (std::move (params)); } },
3031 { R"gql( expensive)gql" sv, [this ](service::ResolverParams&& params) { return resolveExpensive (std::move (params)); } },
3132 { R"gql( tasksById)gql" sv, [this ](service::ResolverParams&& params) { return resolveTasksById (std::move (params)); } },
@@ -244,6 +245,22 @@ std::future<service::ResolverResult> Query::resolveTestTaskState(service::Resolv
244245 return service::ModifiedResult<TaskState>::convert<service::TypeModifier::Nullable>(std::move (result), std::move (params));
245246}
246247
248+ service::FieldResult<std::vector<std::shared_ptr<service::Object>>> Query::getAnyType (service::FieldParams&&, std::vector<response::IdType>&&) const
249+ {
250+ throw std::runtime_error (R"ex( Query::getAnyType is not implemented)ex" );
251+ }
252+
253+ std::future<service::ResolverResult> Query::resolveAnyType (service::ResolverParams&& params)
254+ {
255+ auto argIds = service::ModifiedArgument<response::IdType>::require<service::TypeModifier::List>(" ids" , params.arguments );
256+ std::unique_lock resolverLock (_resolverMutex);
257+ auto directives = std::move (params.fieldDirectives );
258+ auto result = getAnyType (service::FieldParams (std::move (params), std::move (directives)), std::move (argIds));
259+ resolverLock.unlock ();
260+
261+ return service::ModifiedResult<service::Object>::convert<service::TypeModifier::List, service::TypeModifier::Nullable>(std::move (result), std::move (params));
262+ }
263+
247264std::future<service::ResolverResult> Query::resolve_typename (service::ResolverParams&& params)
248265{
249266 return service::ModifiedResult<response::StringType>::convert (response::StringType{ R"gql( Query)gql" }, std::move (params));
@@ -301,7 +318,10 @@ void AddQueryDetails(std::shared_ptr<schema::ObjectType> typeQuery, const std::s
301318 schema::Field::Make (R"gql( nested)gql" sv, R"md( )md" sv, std::nullopt , schema->WrapType (introspection::TypeKind::NON_NULL, schema->LookupType (" NestedType" ))),
302319 schema::Field::Make (R"gql( unimplemented)gql" sv, R"md( )md" sv, std::nullopt , schema->WrapType (introspection::TypeKind::NON_NULL, schema->LookupType (" String" ))),
303320 schema::Field::Make (R"gql( expensive)gql" sv, R"md( )md" sv, std::nullopt , schema->WrapType (introspection::TypeKind::NON_NULL, schema->WrapType (introspection::TypeKind::LIST, schema->WrapType (introspection::TypeKind::NON_NULL, schema->LookupType (" Expensive" ))))),
304- schema::Field::Make (R"gql( testTaskState)gql" sv, R"md( )md" sv, std::nullopt , schema->LookupType (" TaskState" ))
321+ schema::Field::Make (R"gql( testTaskState)gql" sv, R"md( )md" sv, std::nullopt , schema->LookupType (" TaskState" )),
322+ schema::Field::Make (R"gql( anyType)gql" sv, R"md( )md" sv, std::nullopt , schema->WrapType (introspection::TypeKind::NON_NULL, schema->WrapType (introspection::TypeKind::LIST, schema->LookupType (" UnionType" ))), {
323+ schema::InputValue::Make (R"gql( ids)gql" sv, R"md( )md" sv, schema->WrapType (introspection::TypeKind::NON_NULL, schema->WrapType (introspection::TypeKind::LIST, schema->WrapType (introspection::TypeKind::NON_NULL, schema->LookupType (" ID" )))), R"gql( )gql" sv)
324+ })
305325 });
306326}
307327
0 commit comments