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" ) // InterfaceNestingResponse is returned by InterfaceNesting on success. type InterfaceNestingResponse struct { Root InterfaceNestingRootTopic `json:"root"` } // InterfaceNestingRootTopic includes the requested fields of the GraphQL type Topic. type InterfaceNestingRootTopic struct { // ID is documented in the Content interface. Id testutil.ID `json:"id"` Children []InterfaceNestingRootTopicChildrenContent `json:"-"` } func (v *InterfaceNestingRootTopic) UnmarshalJSON(b []byte) error { type InterfaceNestingRootTopicWrapper InterfaceNestingRootTopic var firstPass struct { *InterfaceNestingRootTopicWrapper Children []json.RawMessage `json:"children"` } firstPass.InterfaceNestingRootTopicWrapper = (*InterfaceNestingRootTopicWrapper)(v) err := json.Unmarshal(b, &firstPass) if err != nil { return err } { target := &v.Children raw := firstPass.Children *target = make( []InterfaceNestingRootTopicChildrenContent, len(raw)) for i, raw := range raw { target := &(*target)[i] err = __unmarshalInterfaceNestingRootTopicChildrenContent( target, raw) if err != nil { return fmt.Errorf( "Unable to unmarshal InterfaceNestingRootTopic.Children: %w", err) } } } return nil } // InterfaceNestingRootTopicChildrenArticle includes the requested fields of the GraphQL type Article. type InterfaceNestingRootTopicChildrenArticle struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Parent InterfaceNestingRootTopicChildrenParentTopic `json:"parent"` } // InterfaceNestingRootTopicChildrenContent includes the requested fields of the GraphQL interface Content. // // InterfaceNestingRootTopicChildrenContent is implemented by the following types: // InterfaceNestingRootTopicChildrenArticle // InterfaceNestingRootTopicChildrenVideo // InterfaceNestingRootTopicChildrenTopic // // The GraphQL type's documentation follows. // // Content is implemented by various types like Article, Video, and Topic. type InterfaceNestingRootTopicChildrenContent interface { implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenContent() // 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 // GetParent returns the interface-field "parent" from its implementation. GetParent() InterfaceNestingRootTopicChildrenParentTopic } func (v *InterfaceNestingRootTopicChildrenArticle) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenArticle) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenArticle) GetId() testutil.ID { return v.Id } // GetParent is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenArticle) GetParent() InterfaceNestingRootTopicChildrenParentTopic { return v.Parent } func (v *InterfaceNestingRootTopicChildrenVideo) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenVideo) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenVideo) GetId() testutil.ID { return v.Id } // GetParent is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenVideo) GetParent() InterfaceNestingRootTopicChildrenParentTopic { return v.Parent } func (v *InterfaceNestingRootTopicChildrenTopic) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenTopic) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenTopic) GetId() testutil.ID { return v.Id } // GetParent is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenTopic) GetParent() InterfaceNestingRootTopicChildrenParentTopic { return v.Parent } func __unmarshalInterfaceNestingRootTopicChildrenContent(v *InterfaceNestingRootTopicChildrenContent, 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(InterfaceNestingRootTopicChildrenArticle) return json.Unmarshal(m, *v) case "Video": *v = new(InterfaceNestingRootTopicChildrenVideo) return json.Unmarshal(m, *v) case "Topic": *v = new(InterfaceNestingRootTopicChildrenTopic) return json.Unmarshal(m, *v) case "": return fmt.Errorf( "Response was missing Content.__typename") default: return fmt.Errorf( `Unexpected concrete type for InterfaceNestingRootTopicChildrenContent: "%v"`, tn.TypeName) } } // InterfaceNestingRootTopicChildrenParentTopic includes the requested fields of the GraphQL type Topic. type InterfaceNestingRootTopicChildrenParentTopic struct { // ID is documented in the Content interface. Id testutil.ID `json:"id"` Children []InterfaceNestingRootTopicChildrenParentTopicChildrenContent `json:"-"` } func (v *InterfaceNestingRootTopicChildrenParentTopic) UnmarshalJSON(b []byte) error { type InterfaceNestingRootTopicChildrenParentTopicWrapper InterfaceNestingRootTopicChildrenParentTopic var firstPass struct { *InterfaceNestingRootTopicChildrenParentTopicWrapper Children []json.RawMessage `json:"children"` } firstPass.InterfaceNestingRootTopicChildrenParentTopicWrapper = (*InterfaceNestingRootTopicChildrenParentTopicWrapper)(v) err := json.Unmarshal(b, &firstPass) if err != nil { return err } { target := &v.Children raw := firstPass.Children *target = make( []InterfaceNestingRootTopicChildrenParentTopicChildrenContent, len(raw)) for i, raw := range raw { target := &(*target)[i] err = __unmarshalInterfaceNestingRootTopicChildrenParentTopicChildrenContent( target, raw) if err != nil { return fmt.Errorf( "Unable to unmarshal InterfaceNestingRootTopicChildrenParentTopic.Children: %w", err) } } } return nil } // InterfaceNestingRootTopicChildrenParentTopicChildrenArticle includes the requested fields of the GraphQL type Article. type InterfaceNestingRootTopicChildrenParentTopicChildrenArticle struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` } // InterfaceNestingRootTopicChildrenParentTopicChildrenContent includes the requested fields of the GraphQL interface Content. // // InterfaceNestingRootTopicChildrenParentTopicChildrenContent is implemented by the following types: // InterfaceNestingRootTopicChildrenParentTopicChildrenArticle // InterfaceNestingRootTopicChildrenParentTopicChildrenVideo // InterfaceNestingRootTopicChildrenParentTopicChildrenTopic // // The GraphQL type's documentation follows. // // Content is implemented by various types like Article, Video, and Topic. type InterfaceNestingRootTopicChildrenParentTopicChildrenContent interface { implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenParentTopicChildrenContent() // 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 } func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenArticle) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenParentTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenArticle) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenArticle) GetId() testutil.ID { return v.Id } func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenVideo) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenParentTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenVideo) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenVideo) GetId() testutil.ID { return v.Id } func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenTopic) implementsGraphQLInterfaceInterfaceNestingRootTopicChildrenParentTopicChildrenContent() { } // GetTypename is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenTopic) GetTypename() string { return v.Typename } // GetId is a part of, and documented with, the interface InterfaceNestingRootTopicChildrenParentTopicChildrenContent. func (v *InterfaceNestingRootTopicChildrenParentTopicChildrenTopic) GetId() testutil.ID { return v.Id } func __unmarshalInterfaceNestingRootTopicChildrenParentTopicChildrenContent(v *InterfaceNestingRootTopicChildrenParentTopicChildrenContent, 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(InterfaceNestingRootTopicChildrenParentTopicChildrenArticle) return json.Unmarshal(m, *v) case "Video": *v = new(InterfaceNestingRootTopicChildrenParentTopicChildrenVideo) return json.Unmarshal(m, *v) case "Topic": *v = new(InterfaceNestingRootTopicChildrenParentTopicChildrenTopic) return json.Unmarshal(m, *v) case "": return fmt.Errorf( "Response was missing Content.__typename") default: return fmt.Errorf( `Unexpected concrete type for InterfaceNestingRootTopicChildrenParentTopicChildrenContent: "%v"`, tn.TypeName) } } // InterfaceNestingRootTopicChildrenParentTopicChildrenTopic includes the requested fields of the GraphQL type Topic. type InterfaceNestingRootTopicChildrenParentTopicChildrenTopic struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` } // InterfaceNestingRootTopicChildrenParentTopicChildrenVideo includes the requested fields of the GraphQL type Video. type InterfaceNestingRootTopicChildrenParentTopicChildrenVideo struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` } // InterfaceNestingRootTopicChildrenTopic includes the requested fields of the GraphQL type Topic. type InterfaceNestingRootTopicChildrenTopic struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Parent InterfaceNestingRootTopicChildrenParentTopic `json:"parent"` } // InterfaceNestingRootTopicChildrenVideo includes the requested fields of the GraphQL type Video. type InterfaceNestingRootTopicChildrenVideo struct { Typename string `json:"__typename"` // ID is the identifier of the content. Id testutil.ID `json:"id"` Parent InterfaceNestingRootTopicChildrenParentTopic `json:"parent"` } func InterfaceNesting( client graphql.Client, ) (*InterfaceNestingResponse, error) { var retval InterfaceNestingResponse err := client.MakeRequest( nil, "InterfaceNesting", ` query InterfaceNesting { root { id children { __typename id parent { id children { __typename id } } } } } `, &retval, nil, ) return &retval, err }