package test // Code generated by github.com/Khan/genqlient, DO NOT EDIT. import ( "encoding/json" "fmt" "github.com/Khan/genqlient/graphql" "github.com/Khan/genqlient/internal/testutil" ) // SimpleNamedFragmentRandomItemArticle includes the requested fields of the GraphQL type Article. type SimpleNamedFragmentRandomItemArticle struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Name string `json:"name"` } // SimpleNamedFragmentRandomItemContent includes the requested fields of the GraphQL interface Content. // // SimpleNamedFragmentRandomItemContent is implemented by the following types: // SimpleNamedFragmentRandomItemArticle // SimpleNamedFragmentRandomItemVideo // SimpleNamedFragmentRandomItemTopic // The GraphQL type's documentation follows. // // Content is implemented by various types like Article, Video, and Topic. type SimpleNamedFragmentRandomItemContent interface { implementsGraphQLInterfaceSimpleNamedFragmentRandomItemContent() // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). GetTypename() string // GetId returns the interface-field "id" from its implementation. // The GraphQL interface field's documentation follows. // // ID is the identifier of the content. GetId() testutil.ID // GetName returns the interface-field "name" from its implementation. GetName() string } func (v *SimpleNamedFragmentRandomItemArticle) implementsGraphQLInterfaceSimpleNamedFragmentRandomItemContent() { } // GetTypename is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemArticle) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemArticle) GetId() testutil.ID { return v.Id } // GetName is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemArticle) GetName() string { return v.Name } func (v *SimpleNamedFragmentRandomItemVideo) implementsGraphQLInterfaceSimpleNamedFragmentRandomItemContent() { } // GetTypename is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemVideo) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemVideo) GetId() testutil.ID { return v.Id } // GetName is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemVideo) GetName() string { return v.Name } func (v *SimpleNamedFragmentRandomItemTopic) implementsGraphQLInterfaceSimpleNamedFragmentRandomItemContent() { } // GetTypename is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemTopic) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemTopic) GetId() testutil.ID { return v.Id } // GetName is a part of, and documented with, the interface SimpleNamedFragmentRandomItemContent. func (v *SimpleNamedFragmentRandomItemTopic) GetName() string { return v.Name } func __unmarshalSimpleNamedFragmentRandomItemContent(v *SimpleNamedFragmentRandomItemContent, m json.RawMessage) error { if string(m) == "null" { return nil } var tn struct { TypeName string `json:"__typename"` } err := json.Unmarshal(m, &tn) if err != nil { return err } switch tn.TypeName { case "Article": *v = new(SimpleNamedFragmentRandomItemArticle) return json.Unmarshal(m, *v) case "Video": *v = new(SimpleNamedFragmentRandomItemVideo) return json.Unmarshal(m, *v) case "Topic": *v = new(SimpleNamedFragmentRandomItemTopic) return json.Unmarshal(m, *v) case "": return fmt.Errorf( "Response was missing Content.__typename") default: return fmt.Errorf( `Unexpected concrete type for SimpleNamedFragmentRandomItemContent: "%v"`, tn.TypeName) } } // SimpleNamedFragmentRandomItemTopic includes the requested fields of the GraphQL type Topic. type SimpleNamedFragmentRandomItemTopic struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Name string `json:"name"` } // SimpleNamedFragmentRandomItemVideo includes the requested fields of the GraphQL type Video. type SimpleNamedFragmentRandomItemVideo struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Name string `json:"name"` VideoFields `json:"-"` } func (v *SimpleNamedFragmentRandomItemVideo) UnmarshalJSON(b []byte) error { var firstPass struct { *SimpleNamedFragmentRandomItemVideo graphql.NoUnmarshalJSON } firstPass.SimpleNamedFragmentRandomItemVideo = v err := json.Unmarshal(b, &firstPass) if err != nil { return err } err = json.Unmarshal( b, &v.VideoFields) if err != nil { return err } return nil } // SimpleNamedFragmentRandomLeafArticle includes the requested fields of the GraphQL type Article. type SimpleNamedFragmentRandomLeafArticle struct { Typename string `json:"__typename"` } // SimpleNamedFragmentRandomLeafLeafContent includes the requested fields of the GraphQL interface LeafContent. // // SimpleNamedFragmentRandomLeafLeafContent is implemented by the following types: // SimpleNamedFragmentRandomLeafArticle // SimpleNamedFragmentRandomLeafVideo // The GraphQL type's documentation follows. // // LeafContent represents content items that can't have child-nodes. type SimpleNamedFragmentRandomLeafLeafContent interface { implementsGraphQLInterfaceSimpleNamedFragmentRandomLeafLeafContent() // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). GetTypename() string } func (v *SimpleNamedFragmentRandomLeafArticle) implementsGraphQLInterfaceSimpleNamedFragmentRandomLeafLeafContent() { } // GetTypename is a part of, and documented with, the interface SimpleNamedFragmentRandomLeafLeafContent. func (v *SimpleNamedFragmentRandomLeafArticle) GetTypename() string { return v.Typename } func (v *SimpleNamedFragmentRandomLeafVideo) implementsGraphQLInterfaceSimpleNamedFragmentRandomLeafLeafContent() { } // GetTypename is a part of, and documented with, the interface SimpleNamedFragmentRandomLeafLeafContent. func (v *SimpleNamedFragmentRandomLeafVideo) GetTypename() string { return v.Typename } func __unmarshalSimpleNamedFragmentRandomLeafLeafContent(v *SimpleNamedFragmentRandomLeafLeafContent, m json.RawMessage) error { if string(m) == "null" { return nil } var tn struct { TypeName string `json:"__typename"` } err := json.Unmarshal(m, &tn) if err != nil { return err } switch tn.TypeName { case "Article": *v = new(SimpleNamedFragmentRandomLeafArticle) return json.Unmarshal(m, *v) case "Video": *v = new(SimpleNamedFragmentRandomLeafVideo) return json.Unmarshal(m, *v) case "": return fmt.Errorf( "Response was missing LeafContent.__typename") default: return fmt.Errorf( `Unexpected concrete type for SimpleNamedFragmentRandomLeafLeafContent: "%v"`, tn.TypeName) } } // SimpleNamedFragmentRandomLeafVideo includes the requested fields of the GraphQL type Video. type SimpleNamedFragmentRandomLeafVideo struct { Typename string `json:"__typename"` VideoFields `json:"-"` } func (v *SimpleNamedFragmentRandomLeafVideo) UnmarshalJSON(b []byte) error { var firstPass struct { *SimpleNamedFragmentRandomLeafVideo graphql.NoUnmarshalJSON } firstPass.SimpleNamedFragmentRandomLeafVideo = v err := json.Unmarshal(b, &firstPass) if err != nil { return err } err = json.Unmarshal( b, &v.VideoFields) if err != nil { return err } return nil } // SimpleNamedFragmentResponse is returned by SimpleNamedFragment on success. type SimpleNamedFragmentResponse struct { RandomItem SimpleNamedFragmentRandomItemContent `json:"-"` RandomLeaf SimpleNamedFragmentRandomLeafLeafContent `json:"-"` } func (v *SimpleNamedFragmentResponse) UnmarshalJSON(b []byte) error { var firstPass struct { *SimpleNamedFragmentResponse RandomItem json.RawMessage `json:"randomItem"` RandomLeaf json.RawMessage `json:"randomLeaf"` graphql.NoUnmarshalJSON } firstPass.SimpleNamedFragmentResponse = v err := json.Unmarshal(b, &firstPass) if err != nil { return err } { target := &v.RandomItem raw := firstPass.RandomItem err = __unmarshalSimpleNamedFragmentRandomItemContent( target, raw) if err != nil { return fmt.Errorf( "Unable to unmarshal SimpleNamedFragmentResponse.RandomItem: %w", err) } } { target := &v.RandomLeaf raw := firstPass.RandomLeaf err = __unmarshalSimpleNamedFragmentRandomLeafLeafContent( target, raw) if err != nil { return fmt.Errorf( "Unable to unmarshal SimpleNamedFragmentResponse.RandomLeaf: %w", err) } } return nil } // VideoFields includes the GraphQL fields of Video requested by the fragment VideoFields. type VideoFields struct { // ID is documented in the Content interface. Id testutil.ID `json:"id"` Name string `json:"name"` Url string `json:"url"` Duration int `json:"duration"` Thumbnail VideoFieldsThumbnail `json:"thumbnail"` } // VideoFieldsThumbnail includes the requested fields of the GraphQL type Thumbnail. type VideoFieldsThumbnail struct { Id testutil.ID `json:"id"` } func SimpleNamedFragment( client graphql.Client, ) (*SimpleNamedFragmentResponse, error) { var err error var retval SimpleNamedFragmentResponse err = client.MakeRequest( nil, "SimpleNamedFragment", ` query SimpleNamedFragment { randomItem { __typename id name ... VideoFields } randomLeaf { __typename ... VideoFields } } fragment VideoFields on Video { id name url duration thumbnail { id } } `, &retval, nil, ) return &retval, err }