Skip to content

Commit faaba1b

Browse files
authored
feature: @OneOf input object support (#537)
1 parent 5a8b311 commit faaba1b

File tree

31 files changed

+2070
-144
lines changed

31 files changed

+2070
-144
lines changed

Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/LocalCacheMutations/AllAnimalsLocalCacheMutation.graphql.swift

+1-4
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ public class AllAnimalsLocalCacheMutation: LocalCacheMutation {
6060
set { __data["skinCovering"] = newValue }
6161
}
6262

63-
public var asBird: AsBird? {
64-
get { _asInlineFragment() }
65-
set { if let newData = newValue?.__data._data { __data._data = newData }}
66-
}
63+
public var asBird: AsBird? { _asInlineFragment() }
6764

6865
public init(
6966
__typename: String,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
// @generated
2+
// This file was automatically generated and should not be edited.
3+
4+
@_exported import ApolloAPI
5+
6+
public class FindPetQuery: GraphQLQuery {
7+
public static let operationName: String = "FindPet"
8+
public static let operationDocument: ApolloAPI.OperationDocument = .init(
9+
definition: .init(
10+
#"query FindPet($input: PetSearchInput!) { findPet(input: $input) { __typename id humanName } }"#
11+
))
12+
13+
public var input: PetSearchInput
14+
15+
public init(input: PetSearchInput) {
16+
self.input = input
17+
}
18+
19+
public var __variables: Variables? { ["input": input] }
20+
21+
public struct Data: AnimalKingdomAPI.SelectionSet {
22+
public let __data: DataDict
23+
public init(_dataDict: DataDict) { __data = _dataDict }
24+
25+
public static var __parentType: any ApolloAPI.ParentType { AnimalKingdomAPI.Objects.Query }
26+
public static var __selections: [ApolloAPI.Selection] { [
27+
.field("findPet", [FindPet].self, arguments: ["input": .variable("input")]),
28+
] }
29+
30+
public var findPet: [FindPet] { __data["findPet"] }
31+
32+
public init(
33+
findPet: [FindPet]
34+
) {
35+
self.init(_dataDict: DataDict(
36+
data: [
37+
"__typename": AnimalKingdomAPI.Objects.Query.typename,
38+
"findPet": findPet._fieldData,
39+
],
40+
fulfilledFragments: [
41+
ObjectIdentifier(FindPetQuery.Data.self)
42+
]
43+
))
44+
}
45+
46+
/// FindPet
47+
///
48+
/// Parent Type: `Pet`
49+
public struct FindPet: AnimalKingdomAPI.SelectionSet {
50+
public let __data: DataDict
51+
public init(_dataDict: DataDict) { __data = _dataDict }
52+
53+
public static var __parentType: any ApolloAPI.ParentType { AnimalKingdomAPI.Interfaces.Pet }
54+
public static var __selections: [ApolloAPI.Selection] { [
55+
.field("__typename", String.self),
56+
.field("id", AnimalKingdomAPI.ID.self),
57+
.field("humanName", String?.self),
58+
] }
59+
60+
public var id: AnimalKingdomAPI.ID { __data["id"] }
61+
public var humanName: String? { __data["humanName"] }
62+
63+
public init(
64+
__typename: String,
65+
id: AnimalKingdomAPI.ID,
66+
humanName: String? = nil
67+
) {
68+
self.init(_dataDict: DataDict(
69+
data: [
70+
"__typename": __typename,
71+
"id": id,
72+
"humanName": humanName,
73+
],
74+
fulfilledFragments: [
75+
ObjectIdentifier(FindPetQuery.Data.FindPet.self)
76+
]
77+
))
78+
}
79+
}
80+
}
81+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// @generated
2+
// This file was automatically generated and should not be edited.
3+
4+
import ApolloAPI
5+
6+
public enum PetSearchInput: OneOfInputObject {
7+
case ownerID(ID)
8+
case petID(ID)
9+
case searchFilters(PetSearchFilters)
10+
11+
public var __data: InputDict {
12+
switch self {
13+
case .ownerID(let value):
14+
return InputDict(["ownerID": value])
15+
case .petID(let value):
16+
return InputDict(["petID": value])
17+
case .searchFilters(let value):
18+
return InputDict(["searchFilters": value])
19+
}
20+
}
21+
}

Sources/AnimalKingdomAPI/AnimalKingdomAPI/Sources/Schema/SchemaMetadata.graphql.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ public enum SchemaMetadata: ApolloAPI.SchemaMetadata {
2020

2121
public static func objectType(forTypename typename: String) -> ApolloAPI.Object? {
2222
switch typename {
23-
case "Query": return AnimalKingdomAPI.Objects.Query
24-
case "Human": return AnimalKingdomAPI.Objects.Human
23+
case "Bird": return AnimalKingdomAPI.Objects.Bird
2524
case "Cat": return AnimalKingdomAPI.Objects.Cat
25+
case "Crocodile": return AnimalKingdomAPI.Objects.Crocodile
2626
case "Dog": return AnimalKingdomAPI.Objects.Dog
27-
case "Bird": return AnimalKingdomAPI.Objects.Bird
2827
case "Fish": return AnimalKingdomAPI.Objects.Fish
29-
case "Rat": return AnimalKingdomAPI.Objects.Rat
30-
case "PetRock": return AnimalKingdomAPI.Objects.PetRock
31-
case "Crocodile": return AnimalKingdomAPI.Objects.Crocodile
3228
case "Height": return AnimalKingdomAPI.Objects.Height
29+
case "Human": return AnimalKingdomAPI.Objects.Human
3330
case "Mutation": return AnimalKingdomAPI.Objects.Mutation
31+
case "PetRock": return AnimalKingdomAPI.Objects.PetRock
32+
case "Query": return AnimalKingdomAPI.Objects.Query
33+
case "Rat": return AnimalKingdomAPI.Objects.Rat
3434
default: return nil
3535
}
3636
}

Sources/AnimalKingdomAPI/AnimalKingdomAPI/TestMocks/MockObject+Interfaces.graphql.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import AnimalKingdomAPI
66

77
public extension MockObject {
88
typealias Animal = Interface
9-
typealias WarmBlooded = Interface
10-
typealias Pet = Interface
119
typealias HousePet = Interface
10+
typealias Pet = Interface
11+
typealias WarmBlooded = Interface
1212
}

Sources/AnimalKingdomAPI/AnimalKingdomAPI/TestMocks/Query+Mock.graphql.swift

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class Query: MockObject {
1212
public struct MockFields {
1313
@Field<[Animal]>("allAnimals") public var allAnimals
1414
@Field<[ClassroomPet?]>("classroomPets") public var classroomPets
15+
@Field<[Pet]>("findPet") public var findPet
1516
@Field<[Pet]>("pets") public var pets
1617
}
1718
}
@@ -20,11 +21,13 @@ public extension Mock where O == Query {
2021
convenience init(
2122
allAnimals: [(any AnyMock)]? = nil,
2223
classroomPets: [(any AnyMock)?]? = nil,
24+
findPet: [(any AnyMock)]? = nil,
2325
pets: [(any AnyMock)]? = nil
2426
) {
2527
self.init()
2628
_setList(allAnimals, for: \.allAnimals)
2729
_setList(classroomPets, for: \.classroomPets)
30+
_setList(findPet, for: \.findPet)
2831
_setList(pets, for: \.pets)
2932
}
3033
}

Sources/AnimalKingdomAPI/animalkingdom-graphql/AnimalSchema.graphqls

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ type Query {
22
allAnimals: [Animal!]!
33
classroomPets: [ClassroomPet]
44
pets(filters: PetSearchFilters!): [Pet!]!
5+
findPet(input: PetSearchInput!): [Pet!]!
56
}
67

78
type Mutation {
@@ -12,6 +13,12 @@ scalar CustomDate
1213

1314
scalar Object
1415

16+
input PetSearchInput @oneOf {
17+
ownerID: ID
18+
petID: ID
19+
searchFilters: PetSearchFilters
20+
}
21+
1522
input PetAdoptionInput {
1623
ownerID: ID!
1724
petID: ID!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
query FindPet($input: PetSearchInput!) {
2+
findPet(input: $input) {
3+
id
4+
humanName
5+
}
6+
}
7+

0 commit comments

Comments
 (0)