forked from GraphQLSwift/Graphiti
-
Notifications
You must be signed in to change notification settings - Fork 0
/
StarWarsAPI.swift
104 lines (83 loc) · 3.89 KB
/
StarWarsAPI.swift
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import Graphiti
public struct StarWarsAPI: API {
public let resolver = StarWarsResolver()
public let schema = try! Schema<StarWarsResolver, StarWarsContext> {
Enum(Episode.self) {
Value(.newHope)
.description("Released in 1977.")
Value(.empire)
.description("Released in 1980.")
Value(.jedi)
.description("Released in 1983.")
}
.description("One of the films in the Star Wars Trilogy.")
Interface(Character.self) {
Field("id", at: \.id)
.description("The id of the character.")
Field("name", at: \.name)
.description("The name of the character.")
Field("friends", at: \.friends, as: [TypeReference<Character>].self)
.description("The friends of the character, or an empty list if they have none.")
Field("appearsIn", at: \.appearsIn)
.description("Which movies they appear in.")
Field("secretBackstory", at: \.secretBackstory)
.description("All secrets about their past.")
}
.description("A character in the Star Wars Trilogy.")
Type(Planet.self) {
Field("id", at: \.id)
Field("name", at: \.name)
Field("diameter", at: \.diameter)
Field("rotationPeriod", at: \.rotationPeriod)
Field("orbitalPeriod", at: \.orbitalPeriod)
Field("residents", at: \.residents)
}
.description(
"A large mass, planet or planetoid in the Star Wars Universe, at the time of 0 ABY."
)
Type(Human.self, interfaces: [Character.self]) {
Field("id", at: \.id)
Field("name", at: \.name)
Field("appearsIn", at: \.appearsIn)
Field("homePlanet", at: \.homePlanet)
Field("friends", at: Human.getFriends, as: [Character].self)
.description("The friends of the human, or an empty list if they have none.")
Field("secretBackstory", at: Human.getSecretBackstory)
.description("Where are they from and how they came to be who they are.")
}
.description("A humanoid creature in the Star Wars universe.")
Type(Droid.self, interfaces: [Character.self]) {
Field("id", at: \.id)
Field("name", at: \.name)
Field("appearsIn", at: \.appearsIn)
Field("primaryFunction", at: \.primaryFunction)
Field("friends", at: Droid.getFriends, as: [Character].self)
.description("The friends of the droid, or an empty list if they have none.")
Field("secretBackstory", at: Droid.getSecretBackstory)
.description("Where are they from and how they came to be who they are.")
}
.description("A mechanical creature in the Star Wars universe.")
Union(SearchResult.self, members: Planet.self, Human.self, Droid.self)
Query {
Field("hero", at: StarWarsResolver.hero, as: Character.self) {
Argument("episode", at: \.episode)
.description(
"If omitted, returns the hero of the whole saga. If provided, returns the hero of that particular episode."
)
}
.description("Returns a hero based on the given episode.")
Field("human", at: StarWarsResolver.human) {
Argument("id", at: \.id)
.description("Id of the human.")
}
Field("droid", at: StarWarsResolver.droid) {
Argument("id", at: \.id)
.description("Id of the droid.")
}
Field("search", at: StarWarsResolver.search, as: [SearchResult].self) {
Argument("query", at: \.query)
.defaultValue("R2-D2")
}
}
}
}