github.com/opiuman/genqlient@v1.0.0/generate/testdata/snapshots/TestGenerate-SimpleInlineFragment.graphql-SimpleInlineFragment.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  // SimpleInlineFragmentRandomItemArticle includes the requested fields of the GraphQL type Article.
    14  type SimpleInlineFragmentRandomItemArticle struct {
    15  	Typename string `json:"__typename"`
    16  	// ID is the identifier of the content.
    17  	Id   testutil.ID `json:"id"`
    18  	Name string      `json:"name"`
    19  	Text string      `json:"text"`
    20  }
    21  
    22  // GetTypename returns SimpleInlineFragmentRandomItemArticle.Typename, and is useful for accessing the field via an interface.
    23  func (v *SimpleInlineFragmentRandomItemArticle) GetTypename() string { return v.Typename }
    24  
    25  // GetId returns SimpleInlineFragmentRandomItemArticle.Id, and is useful for accessing the field via an interface.
    26  func (v *SimpleInlineFragmentRandomItemArticle) GetId() testutil.ID { return v.Id }
    27  
    28  // GetName returns SimpleInlineFragmentRandomItemArticle.Name, and is useful for accessing the field via an interface.
    29  func (v *SimpleInlineFragmentRandomItemArticle) GetName() string { return v.Name }
    30  
    31  // GetText returns SimpleInlineFragmentRandomItemArticle.Text, and is useful for accessing the field via an interface.
    32  func (v *SimpleInlineFragmentRandomItemArticle) GetText() string { return v.Text }
    33  
    34  // SimpleInlineFragmentRandomItemContent includes the requested fields of the GraphQL interface Content.
    35  //
    36  // SimpleInlineFragmentRandomItemContent is implemented by the following types:
    37  // SimpleInlineFragmentRandomItemArticle
    38  // SimpleInlineFragmentRandomItemVideo
    39  // SimpleInlineFragmentRandomItemTopic
    40  // The GraphQL type's documentation follows.
    41  //
    42  // Content is implemented by various types like Article, Video, and Topic.
    43  type SimpleInlineFragmentRandomItemContent interface {
    44  	implementsGraphQLInterfaceSimpleInlineFragmentRandomItemContent()
    45  	// GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values).
    46  	GetTypename() string
    47  	// GetId returns the interface-field "id" from its implementation.
    48  	// The GraphQL interface field's documentation follows.
    49  	//
    50  	// ID is the identifier of the content.
    51  	GetId() testutil.ID
    52  	// GetName returns the interface-field "name" from its implementation.
    53  	GetName() string
    54  }
    55  
    56  func (v *SimpleInlineFragmentRandomItemArticle) implementsGraphQLInterfaceSimpleInlineFragmentRandomItemContent() {
    57  }
    58  func (v *SimpleInlineFragmentRandomItemVideo) implementsGraphQLInterfaceSimpleInlineFragmentRandomItemContent() {
    59  }
    60  func (v *SimpleInlineFragmentRandomItemTopic) implementsGraphQLInterfaceSimpleInlineFragmentRandomItemContent() {
    61  }
    62  
    63  func __unmarshalSimpleInlineFragmentRandomItemContent(b []byte, v *SimpleInlineFragmentRandomItemContent) error {
    64  	if string(b) == "null" {
    65  		return nil
    66  	}
    67  
    68  	var tn struct {
    69  		TypeName string `json:"__typename"`
    70  	}
    71  	err := json.Unmarshal(b, &tn)
    72  	if err != nil {
    73  		return err
    74  	}
    75  
    76  	switch tn.TypeName {
    77  	case "Article":
    78  		*v = new(SimpleInlineFragmentRandomItemArticle)
    79  		return json.Unmarshal(b, *v)
    80  	case "Video":
    81  		*v = new(SimpleInlineFragmentRandomItemVideo)
    82  		return json.Unmarshal(b, *v)
    83  	case "Topic":
    84  		*v = new(SimpleInlineFragmentRandomItemTopic)
    85  		return json.Unmarshal(b, *v)
    86  	case "":
    87  		return fmt.Errorf(
    88  			"response was missing Content.__typename")
    89  	default:
    90  		return fmt.Errorf(
    91  			`unexpected concrete type for SimpleInlineFragmentRandomItemContent: "%v"`, tn.TypeName)
    92  	}
    93  }
    94  
    95  func __marshalSimpleInlineFragmentRandomItemContent(v *SimpleInlineFragmentRandomItemContent) ([]byte, error) {
    96  
    97  	var typename string
    98  	switch v := (*v).(type) {
    99  	case *SimpleInlineFragmentRandomItemArticle:
   100  		typename = "Article"
   101  
   102  		result := struct {
   103  			TypeName string `json:"__typename"`
   104  			*SimpleInlineFragmentRandomItemArticle
   105  		}{typename, v}
   106  		return json.Marshal(result)
   107  	case *SimpleInlineFragmentRandomItemVideo:
   108  		typename = "Video"
   109  
   110  		result := struct {
   111  			TypeName string `json:"__typename"`
   112  			*SimpleInlineFragmentRandomItemVideo
   113  		}{typename, v}
   114  		return json.Marshal(result)
   115  	case *SimpleInlineFragmentRandomItemTopic:
   116  		typename = "Topic"
   117  
   118  		result := struct {
   119  			TypeName string `json:"__typename"`
   120  			*SimpleInlineFragmentRandomItemTopic
   121  		}{typename, v}
   122  		return json.Marshal(result)
   123  	case nil:
   124  		return []byte("null"), nil
   125  	default:
   126  		return nil, fmt.Errorf(
   127  			`unexpected concrete type for SimpleInlineFragmentRandomItemContent: "%T"`, v)
   128  	}
   129  }
   130  
   131  // SimpleInlineFragmentRandomItemTopic includes the requested fields of the GraphQL type Topic.
   132  type SimpleInlineFragmentRandomItemTopic struct {
   133  	Typename string `json:"__typename"`
   134  	// ID is the identifier of the content.
   135  	Id   testutil.ID `json:"id"`
   136  	Name string      `json:"name"`
   137  }
   138  
   139  // GetTypename returns SimpleInlineFragmentRandomItemTopic.Typename, and is useful for accessing the field via an interface.
   140  func (v *SimpleInlineFragmentRandomItemTopic) GetTypename() string { return v.Typename }
   141  
   142  // GetId returns SimpleInlineFragmentRandomItemTopic.Id, and is useful for accessing the field via an interface.
   143  func (v *SimpleInlineFragmentRandomItemTopic) GetId() testutil.ID { return v.Id }
   144  
   145  // GetName returns SimpleInlineFragmentRandomItemTopic.Name, and is useful for accessing the field via an interface.
   146  func (v *SimpleInlineFragmentRandomItemTopic) GetName() string { return v.Name }
   147  
   148  // SimpleInlineFragmentRandomItemVideo includes the requested fields of the GraphQL type Video.
   149  type SimpleInlineFragmentRandomItemVideo struct {
   150  	Typename string `json:"__typename"`
   151  	// ID is the identifier of the content.
   152  	Id       testutil.ID `json:"id"`
   153  	Name     string      `json:"name"`
   154  	Duration int         `json:"duration"`
   155  }
   156  
   157  // GetTypename returns SimpleInlineFragmentRandomItemVideo.Typename, and is useful for accessing the field via an interface.
   158  func (v *SimpleInlineFragmentRandomItemVideo) GetTypename() string { return v.Typename }
   159  
   160  // GetId returns SimpleInlineFragmentRandomItemVideo.Id, and is useful for accessing the field via an interface.
   161  func (v *SimpleInlineFragmentRandomItemVideo) GetId() testutil.ID { return v.Id }
   162  
   163  // GetName returns SimpleInlineFragmentRandomItemVideo.Name, and is useful for accessing the field via an interface.
   164  func (v *SimpleInlineFragmentRandomItemVideo) GetName() string { return v.Name }
   165  
   166  // GetDuration returns SimpleInlineFragmentRandomItemVideo.Duration, and is useful for accessing the field via an interface.
   167  func (v *SimpleInlineFragmentRandomItemVideo) GetDuration() int { return v.Duration }
   168  
   169  // SimpleInlineFragmentResponse is returned by SimpleInlineFragment on success.
   170  type SimpleInlineFragmentResponse struct {
   171  	RandomItem SimpleInlineFragmentRandomItemContent `json:"-"`
   172  }
   173  
   174  // GetRandomItem returns SimpleInlineFragmentResponse.RandomItem, and is useful for accessing the field via an interface.
   175  func (v *SimpleInlineFragmentResponse) GetRandomItem() SimpleInlineFragmentRandomItemContent {
   176  	return v.RandomItem
   177  }
   178  
   179  func (v *SimpleInlineFragmentResponse) UnmarshalJSON(b []byte) error {
   180  
   181  	if string(b) == "null" {
   182  		return nil
   183  	}
   184  
   185  	var firstPass struct {
   186  		*SimpleInlineFragmentResponse
   187  		RandomItem json.RawMessage `json:"randomItem"`
   188  		graphql.NoUnmarshalJSON
   189  	}
   190  	firstPass.SimpleInlineFragmentResponse = v
   191  
   192  	err := json.Unmarshal(b, &firstPass)
   193  	if err != nil {
   194  		return err
   195  	}
   196  
   197  	{
   198  		dst := &v.RandomItem
   199  		src := firstPass.RandomItem
   200  		if len(src) != 0 && string(src) != "null" {
   201  			err = __unmarshalSimpleInlineFragmentRandomItemContent(
   202  				src, dst)
   203  			if err != nil {
   204  				return fmt.Errorf(
   205  					"Unable to unmarshal SimpleInlineFragmentResponse.RandomItem: %w", err)
   206  			}
   207  		}
   208  	}
   209  	return nil
   210  }
   211  
   212  type __premarshalSimpleInlineFragmentResponse struct {
   213  	RandomItem json.RawMessage `json:"randomItem"`
   214  }
   215  
   216  func (v *SimpleInlineFragmentResponse) MarshalJSON() ([]byte, error) {
   217  	premarshaled, err := v.__premarshalJSON()
   218  	if err != nil {
   219  		return nil, err
   220  	}
   221  	return json.Marshal(premarshaled)
   222  }
   223  
   224  func (v *SimpleInlineFragmentResponse) __premarshalJSON() (*__premarshalSimpleInlineFragmentResponse, error) {
   225  	var retval __premarshalSimpleInlineFragmentResponse
   226  
   227  	{
   228  
   229  		dst := &retval.RandomItem
   230  		src := v.RandomItem
   231  		var err error
   232  		*dst, err = __marshalSimpleInlineFragmentRandomItemContent(
   233  			&src)
   234  		if err != nil {
   235  			return nil, fmt.Errorf(
   236  				"Unable to marshal SimpleInlineFragmentResponse.RandomItem: %w", err)
   237  		}
   238  	}
   239  	return &retval, nil
   240  }
   241  
   242  func SimpleInlineFragment(
   243  	client graphql.Client,
   244  ) (*SimpleInlineFragmentResponse, error) {
   245  	req := &graphql.Request{
   246  		OpName: "SimpleInlineFragment",
   247  		Query: `
   248  query SimpleInlineFragment {
   249  	randomItem {
   250  		__typename
   251  		id
   252  		name
   253  		... on Article {
   254  			text
   255  		}
   256  		... on Video {
   257  			duration
   258  		}
   259  	}
   260  }
   261  `,
   262  	}
   263  	var err error
   264  
   265  	var data SimpleInlineFragmentResponse
   266  	resp := &graphql.Response{Data: &data}
   267  
   268  	err = client.MakeRequest(
   269  		nil,
   270  		req,
   271  		resp,
   272  	)
   273  
   274  	return &data, err
   275  }
   276