github.com/opiuman/genqlient@v1.0.0/generate/testdata/snapshots/TestGenerate-TypeNames.graphql-TypeNames.graphql.go (about) 1 // Code generated by github.com/opiuman/genqlient, DO NOT EDIT. 2 3 package test 4 5 import ( 6 "encoding/json" 7 "fmt" 8 9 "github.com/opiuman/genqlient/graphql" 10 "github.com/opiuman/genqlient/internal/testutil" 11 ) 12 13 // Item includes the requested fields of the GraphQL interface Content. 14 // 15 // Item is implemented by the following types: 16 // ItemArticle 17 // ItemVideo 18 // ItemTopic 19 // The GraphQL type's documentation follows. 20 // 21 // Content is implemented by various types like Article, Video, and Topic. 22 type Item interface { 23 implementsGraphQLInterfaceItem() 24 // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). 25 GetTypename() string 26 // GetId returns the interface-field "id" from its implementation. 27 // The GraphQL interface field's documentation follows. 28 // 29 // ID is the identifier of the content. 30 GetId() testutil.ID 31 // GetName returns the interface-field "name" from its implementation. 32 GetName() NameType 33 } 34 35 func (v *ItemArticle) implementsGraphQLInterfaceItem() {} 36 func (v *ItemVideo) implementsGraphQLInterfaceItem() {} 37 func (v *ItemTopic) implementsGraphQLInterfaceItem() {} 38 39 func __unmarshalItem(b []byte, v *Item) error { 40 if string(b) == "null" { 41 return nil 42 } 43 44 var tn struct { 45 TypeName string `json:"__typename"` 46 } 47 err := json.Unmarshal(b, &tn) 48 if err != nil { 49 return err 50 } 51 52 switch tn.TypeName { 53 case "Article": 54 *v = new(ItemArticle) 55 return json.Unmarshal(b, *v) 56 case "Video": 57 *v = new(ItemVideo) 58 return json.Unmarshal(b, *v) 59 case "Topic": 60 *v = new(ItemTopic) 61 return json.Unmarshal(b, *v) 62 case "": 63 return fmt.Errorf( 64 "response was missing Content.__typename") 65 default: 66 return fmt.Errorf( 67 `unexpected concrete type for Item: "%v"`, tn.TypeName) 68 } 69 } 70 71 func __marshalItem(v *Item) ([]byte, error) { 72 73 var typename string 74 switch v := (*v).(type) { 75 case *ItemArticle: 76 typename = "Article" 77 78 result := struct { 79 TypeName string `json:"__typename"` 80 *ItemArticle 81 }{typename, v} 82 return json.Marshal(result) 83 case *ItemVideo: 84 typename = "Video" 85 86 result := struct { 87 TypeName string `json:"__typename"` 88 *ItemVideo 89 }{typename, v} 90 return json.Marshal(result) 91 case *ItemTopic: 92 typename = "Topic" 93 94 result := struct { 95 TypeName string `json:"__typename"` 96 *ItemTopic 97 }{typename, v} 98 return json.Marshal(result) 99 case nil: 100 return []byte("null"), nil 101 default: 102 return nil, fmt.Errorf( 103 `unexpected concrete type for Item: "%T"`, v) 104 } 105 } 106 107 // ItemArticle includes the requested fields of the GraphQL type Article. 108 type ItemArticle struct { 109 Typename string `json:"__typename"` 110 // ID is the identifier of the content. 111 Id testutil.ID `json:"id"` 112 Name NameType `json:"name"` 113 } 114 115 // GetTypename returns ItemArticle.Typename, and is useful for accessing the field via an interface. 116 func (v *ItemArticle) GetTypename() string { return v.Typename } 117 118 // GetId returns ItemArticle.Id, and is useful for accessing the field via an interface. 119 func (v *ItemArticle) GetId() testutil.ID { return v.Id } 120 121 // GetName returns ItemArticle.Name, and is useful for accessing the field via an interface. 122 func (v *ItemArticle) GetName() NameType { return v.Name } 123 124 // ItemTopic includes the requested fields of the GraphQL type Topic. 125 type ItemTopic struct { 126 Typename string `json:"__typename"` 127 // ID is the identifier of the content. 128 Id testutil.ID `json:"id"` 129 Name NameType `json:"name"` 130 } 131 132 // GetTypename returns ItemTopic.Typename, and is useful for accessing the field via an interface. 133 func (v *ItemTopic) GetTypename() string { return v.Typename } 134 135 // GetId returns ItemTopic.Id, and is useful for accessing the field via an interface. 136 func (v *ItemTopic) GetId() testutil.ID { return v.Id } 137 138 // GetName returns ItemTopic.Name, and is useful for accessing the field via an interface. 139 func (v *ItemTopic) GetName() NameType { return v.Name } 140 141 // ItemVideo includes the requested fields of the GraphQL type Video. 142 type ItemVideo struct { 143 Typename string `json:"__typename"` 144 // ID is the identifier of the content. 145 Id testutil.ID `json:"id"` 146 Name NameType `json:"name"` 147 } 148 149 // GetTypename returns ItemVideo.Typename, and is useful for accessing the field via an interface. 150 func (v *ItemVideo) GetTypename() string { return v.Typename } 151 152 // GetId returns ItemVideo.Id, and is useful for accessing the field via an interface. 153 func (v *ItemVideo) GetId() testutil.ID { return v.Id } 154 155 // GetName returns ItemVideo.Name, and is useful for accessing the field via an interface. 156 func (v *ItemVideo) GetName() NameType { return v.Name } 157 158 type NameType string 159 160 // Resp is returned by TypeNames on success. 161 type Resp struct { 162 // user looks up a user by some stuff. 163 // 164 // See UserQueryInput for what stuff is supported. 165 // If query is null, returns the current user. 166 User User `json:"user"` 167 RandomItem Item `json:"-"` 168 Users []User `json:"users"` 169 } 170 171 // GetUser returns Resp.User, and is useful for accessing the field via an interface. 172 func (v *Resp) GetUser() User { return v.User } 173 174 // GetRandomItem returns Resp.RandomItem, and is useful for accessing the field via an interface. 175 func (v *Resp) GetRandomItem() Item { return v.RandomItem } 176 177 // GetUsers returns Resp.Users, and is useful for accessing the field via an interface. 178 func (v *Resp) GetUsers() []User { return v.Users } 179 180 func (v *Resp) UnmarshalJSON(b []byte) error { 181 182 if string(b) == "null" { 183 return nil 184 } 185 186 var firstPass struct { 187 *Resp 188 RandomItem json.RawMessage `json:"randomItem"` 189 graphql.NoUnmarshalJSON 190 } 191 firstPass.Resp = v 192 193 err := json.Unmarshal(b, &firstPass) 194 if err != nil { 195 return err 196 } 197 198 { 199 dst := &v.RandomItem 200 src := firstPass.RandomItem 201 if len(src) != 0 && string(src) != "null" { 202 err = __unmarshalItem( 203 src, dst) 204 if err != nil { 205 return fmt.Errorf( 206 "Unable to unmarshal Resp.RandomItem: %w", err) 207 } 208 } 209 } 210 return nil 211 } 212 213 type __premarshalResp struct { 214 User User `json:"user"` 215 216 RandomItem json.RawMessage `json:"randomItem"` 217 218 Users []User `json:"users"` 219 } 220 221 func (v *Resp) MarshalJSON() ([]byte, error) { 222 premarshaled, err := v.__premarshalJSON() 223 if err != nil { 224 return nil, err 225 } 226 return json.Marshal(premarshaled) 227 } 228 229 func (v *Resp) __premarshalJSON() (*__premarshalResp, error) { 230 var retval __premarshalResp 231 232 retval.User = v.User 233 { 234 235 dst := &retval.RandomItem 236 src := v.RandomItem 237 var err error 238 *dst, err = __marshalItem( 239 &src) 240 if err != nil { 241 return nil, fmt.Errorf( 242 "Unable to marshal Resp.RandomItem: %w", err) 243 } 244 } 245 retval.Users = v.Users 246 return &retval, nil 247 } 248 249 // User includes the requested fields of the GraphQL type User. 250 // The GraphQL type's documentation follows. 251 // 252 // A User is a user! 253 type User struct { 254 // id is the user's ID. 255 // 256 // It is stable, unique, and opaque, like all good IDs. 257 Id testutil.ID `json:"id"` 258 Name string `json:"name"` 259 } 260 261 // GetId returns User.Id, and is useful for accessing the field via an interface. 262 func (v *User) GetId() testutil.ID { return v.Id } 263 264 // GetName returns User.Name, and is useful for accessing the field via an interface. 265 func (v *User) GetName() string { return v.Name } 266 267 func TypeNames( 268 client graphql.Client, 269 ) (*Resp, error) { 270 req := &graphql.Request{ 271 OpName: "TypeNames", 272 Query: ` 273 query TypeNames { 274 user { 275 id 276 name 277 } 278 randomItem { 279 __typename 280 id 281 name 282 } 283 users { 284 id 285 name 286 } 287 } 288 `, 289 } 290 var err error 291 292 var data Resp 293 resp := &graphql.Response{Data: &data} 294 295 err = client.MakeRequest( 296 nil, 297 req, 298 resp, 299 ) 300 301 return &data, err 302 } 303