forked from microsoft/cppgraphqlgen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProxySchema.cpp
More file actions
80 lines (63 loc) · 2.86 KB
/
Copy pathProxySchema.cpp
File metadata and controls
80 lines (63 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// WARNING! Do not edit this file manually, your changes will be overwritten.
#include "QueryObject.h"
#include "graphqlservice/internal/Schema.h"
#include "graphqlservice/introspection/IntrospectionSchema.h"
#include <algorithm>
#include <array>
#include <cstddef>
#include <functional>
#include <stdexcept>
#include <string_view>
#include <utility>
#include <vector>
using namespace std::literals;
namespace graphql::proxy {
Operations::Operations(std::shared_ptr<object::Query> query)
: service::Request({
{ service::strQuery, query }
}, GetSchema())
, _query(std::move(query))
{
}
void AddTypesToSchema(const std::shared_ptr<schema::Schema>& schema)
{
auto typeOperationType = schema::EnumType::Make(R"gql(OperationType)gql"sv, R"md()md"sv);
schema->AddType(R"gql(OperationType)gql"sv, typeOperationType);
auto typeQueryInput = schema::InputObjectType::Make(R"gql(QueryInput)gql"sv, R"md()md"sv);
schema->AddType(R"gql(QueryInput)gql"sv, typeQueryInput);
auto typeQuery = schema::ObjectType::Make(R"gql(Query)gql"sv, R"md()md"sv);
schema->AddType(R"gql(Query)gql"sv, typeQuery);
auto typeQueryResults = schema::ObjectType::Make(R"gql(QueryResults)gql"sv, R"md()md"sv);
schema->AddType(R"gql(QueryResults)gql"sv, typeQueryResults);
static const auto s_namesOperationType = getOperationTypeNames();
typeOperationType->AddEnumValues({
{ s_namesOperationType[static_cast<std::size_t>(proxy::OperationType::QUERY)], R"md()md"sv, std::nullopt },
{ s_namesOperationType[static_cast<std::size_t>(proxy::OperationType::MUTATION)], R"md()md"sv, std::nullopt },
{ s_namesOperationType[static_cast<std::size_t>(proxy::OperationType::SUBSCRIPTION)], R"md()md"sv, std::nullopt }
});
typeQueryInput->AddInputValues({
schema::InputValue::Make(R"gql(type)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(OperationType)gql"sv)), R"gql()gql"sv),
schema::InputValue::Make(R"gql(query)gql"sv, R"md()md"sv, schema->WrapType(introspection::TypeKind::NON_NULL, schema->LookupType(R"gql(String)gql"sv)), R"gql()gql"sv),
schema::InputValue::Make(R"gql(operationName)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql(null)gql"sv),
schema::InputValue::Make(R"gql(variables)gql"sv, R"md()md"sv, schema->LookupType(R"gql(String)gql"sv), R"gql(null)gql"sv)
});
AddQueryDetails(typeQuery, schema);
AddQueryResultsDetails(typeQueryResults, schema);
schema->AddQueryType(typeQuery);
}
std::shared_ptr<schema::Schema> GetSchema()
{
static std::weak_ptr<schema::Schema> s_wpSchema;
auto schema = s_wpSchema.lock();
if (!schema)
{
schema = std::make_shared<schema::Schema>(false, R"md()md"sv);
introspection::AddTypesToSchema(schema);
AddTypesToSchema(schema);
s_wpSchema = schema;
}
return schema;
}
} // namespace graphql::proxy