enum TestEnum {
  EnumA
  EnumB
  EnumC
}

input NestedInputObject {
  fieldTestID: ID!
}

input TestInputObject {
  fieldTestScalar: TestScalar!
  fieldNestedInputObject: [NestedInputObject]!
}

input Coordinates {
  latitude: TestScalar!
  longitude: Int!
}

type Address {
  city: String!
  street(
    argInputObject: TestInputObject!
    argMaybeString: String
  ): [[[[String!]!]!]]
  houseNumber: Int!
}

union TestUnion = User | Address

type User {
  name: String!
  email: String!
  address(coordinates: Coordinates!, comment: String): Address!
  office(zipCode: [Int!], cityID: TestEnum!): Address!
  friend: User
}

type Query {
  user: User!
  testUnion: TestUnion
}

type Mutation {
  createUser(userID: String!, userName: String): User!
}

type Subscription {
  newUser: User!
}