github.com/opiuman/genqlient@v1.0.0/generate/testdata/snapshots/TestGenerate-ComplexNamedFragments.graphql-ComplexNamedFragments.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 // ComplexNamedFragmentsResponse is returned by ComplexNamedFragments on success. 14 type ComplexNamedFragmentsResponse struct { 15 QueryFragment `json:"-"` 16 } 17 18 // GetRandomItem returns ComplexNamedFragmentsResponse.RandomItem, and is useful for accessing the field via an interface. 19 func (v *ComplexNamedFragmentsResponse) GetRandomItem() InnerQueryFragmentRandomItemContent { 20 return v.QueryFragment.InnerQueryFragment.RandomItem 21 } 22 23 // GetRandomLeaf returns ComplexNamedFragmentsResponse.RandomLeaf, and is useful for accessing the field via an interface. 24 func (v *ComplexNamedFragmentsResponse) GetRandomLeaf() InnerQueryFragmentRandomLeafLeafContent { 25 return v.QueryFragment.InnerQueryFragment.RandomLeaf 26 } 27 28 // GetOtherLeaf returns ComplexNamedFragmentsResponse.OtherLeaf, and is useful for accessing the field via an interface. 29 func (v *ComplexNamedFragmentsResponse) GetOtherLeaf() InnerQueryFragmentOtherLeafLeafContent { 30 return v.QueryFragment.InnerQueryFragment.OtherLeaf 31 } 32 33 func (v *ComplexNamedFragmentsResponse) UnmarshalJSON(b []byte) error { 34 35 if string(b) == "null" { 36 return nil 37 } 38 39 var firstPass struct { 40 *ComplexNamedFragmentsResponse 41 graphql.NoUnmarshalJSON 42 } 43 firstPass.ComplexNamedFragmentsResponse = v 44 45 err := json.Unmarshal(b, &firstPass) 46 if err != nil { 47 return err 48 } 49 50 err = json.Unmarshal( 51 b, &v.QueryFragment) 52 if err != nil { 53 return err 54 } 55 return nil 56 } 57 58 type __premarshalComplexNamedFragmentsResponse struct { 59 RandomItem json.RawMessage `json:"randomItem"` 60 61 RandomLeaf json.RawMessage `json:"randomLeaf"` 62 63 OtherLeaf json.RawMessage `json:"otherLeaf"` 64 } 65 66 func (v *ComplexNamedFragmentsResponse) MarshalJSON() ([]byte, error) { 67 premarshaled, err := v.__premarshalJSON() 68 if err != nil { 69 return nil, err 70 } 71 return json.Marshal(premarshaled) 72 } 73 74 func (v *ComplexNamedFragmentsResponse) __premarshalJSON() (*__premarshalComplexNamedFragmentsResponse, error) { 75 var retval __premarshalComplexNamedFragmentsResponse 76 77 { 78 79 dst := &retval.RandomItem 80 src := v.QueryFragment.InnerQueryFragment.RandomItem 81 var err error 82 *dst, err = __marshalInnerQueryFragmentRandomItemContent( 83 &src) 84 if err != nil { 85 return nil, fmt.Errorf( 86 "Unable to marshal ComplexNamedFragmentsResponse.QueryFragment.InnerQueryFragment.RandomItem: %w", err) 87 } 88 } 89 { 90 91 dst := &retval.RandomLeaf 92 src := v.QueryFragment.InnerQueryFragment.RandomLeaf 93 var err error 94 *dst, err = __marshalInnerQueryFragmentRandomLeafLeafContent( 95 &src) 96 if err != nil { 97 return nil, fmt.Errorf( 98 "Unable to marshal ComplexNamedFragmentsResponse.QueryFragment.InnerQueryFragment.RandomLeaf: %w", err) 99 } 100 } 101 { 102 103 dst := &retval.OtherLeaf 104 src := v.QueryFragment.InnerQueryFragment.OtherLeaf 105 var err error 106 *dst, err = __marshalInnerQueryFragmentOtherLeafLeafContent( 107 &src) 108 if err != nil { 109 return nil, fmt.Errorf( 110 "Unable to marshal ComplexNamedFragmentsResponse.QueryFragment.InnerQueryFragment.OtherLeaf: %w", err) 111 } 112 } 113 return &retval, nil 114 } 115 116 // ContentFields includes the GraphQL fields of Content requested by the fragment ContentFields. 117 // The GraphQL type's documentation follows. 118 // 119 // Content is implemented by various types like Article, Video, and Topic. 120 // 121 // ContentFields is implemented by the following types: 122 // ContentFieldsArticle 123 // ContentFieldsVideo 124 // ContentFieldsTopic 125 type ContentFields interface { 126 implementsGraphQLInterfaceContentFields() 127 // GetName returns the interface-field "name" from its implementation. 128 GetName() string 129 // GetUrl returns the interface-field "url" from its implementation. 130 GetUrl() string 131 } 132 133 func (v *ContentFieldsArticle) implementsGraphQLInterfaceContentFields() {} 134 func (v *ContentFieldsVideo) implementsGraphQLInterfaceContentFields() {} 135 func (v *ContentFieldsTopic) implementsGraphQLInterfaceContentFields() {} 136 137 func __unmarshalContentFields(b []byte, v *ContentFields) error { 138 if string(b) == "null" { 139 return nil 140 } 141 142 var tn struct { 143 TypeName string `json:"__typename"` 144 } 145 err := json.Unmarshal(b, &tn) 146 if err != nil { 147 return err 148 } 149 150 switch tn.TypeName { 151 case "Article": 152 *v = new(ContentFieldsArticle) 153 return json.Unmarshal(b, *v) 154 case "Video": 155 *v = new(ContentFieldsVideo) 156 return json.Unmarshal(b, *v) 157 case "Topic": 158 *v = new(ContentFieldsTopic) 159 return json.Unmarshal(b, *v) 160 case "": 161 return fmt.Errorf( 162 "response was missing Content.__typename") 163 default: 164 return fmt.Errorf( 165 `unexpected concrete type for ContentFields: "%v"`, tn.TypeName) 166 } 167 } 168 169 func __marshalContentFields(v *ContentFields) ([]byte, error) { 170 171 var typename string 172 switch v := (*v).(type) { 173 case *ContentFieldsArticle: 174 typename = "Article" 175 176 result := struct { 177 TypeName string `json:"__typename"` 178 *ContentFieldsArticle 179 }{typename, v} 180 return json.Marshal(result) 181 case *ContentFieldsVideo: 182 typename = "Video" 183 184 result := struct { 185 TypeName string `json:"__typename"` 186 *ContentFieldsVideo 187 }{typename, v} 188 return json.Marshal(result) 189 case *ContentFieldsTopic: 190 typename = "Topic" 191 192 result := struct { 193 TypeName string `json:"__typename"` 194 *ContentFieldsTopic 195 }{typename, v} 196 return json.Marshal(result) 197 case nil: 198 return []byte("null"), nil 199 default: 200 return nil, fmt.Errorf( 201 `unexpected concrete type for ContentFields: "%T"`, v) 202 } 203 } 204 205 // ContentFields includes the GraphQL fields of Article requested by the fragment ContentFields. 206 // The GraphQL type's documentation follows. 207 // 208 // Content is implemented by various types like Article, Video, and Topic. 209 type ContentFieldsArticle struct { 210 Name string `json:"name"` 211 Url string `json:"url"` 212 } 213 214 // GetName returns ContentFieldsArticle.Name, and is useful for accessing the field via an interface. 215 func (v *ContentFieldsArticle) GetName() string { return v.Name } 216 217 // GetUrl returns ContentFieldsArticle.Url, and is useful for accessing the field via an interface. 218 func (v *ContentFieldsArticle) GetUrl() string { return v.Url } 219 220 // ContentFields includes the GraphQL fields of Topic requested by the fragment ContentFields. 221 // The GraphQL type's documentation follows. 222 // 223 // Content is implemented by various types like Article, Video, and Topic. 224 type ContentFieldsTopic struct { 225 Name string `json:"name"` 226 Url string `json:"url"` 227 } 228 229 // GetName returns ContentFieldsTopic.Name, and is useful for accessing the field via an interface. 230 func (v *ContentFieldsTopic) GetName() string { return v.Name } 231 232 // GetUrl returns ContentFieldsTopic.Url, and is useful for accessing the field via an interface. 233 func (v *ContentFieldsTopic) GetUrl() string { return v.Url } 234 235 // ContentFields includes the GraphQL fields of Video requested by the fragment ContentFields. 236 // The GraphQL type's documentation follows. 237 // 238 // Content is implemented by various types like Article, Video, and Topic. 239 type ContentFieldsVideo struct { 240 Name string `json:"name"` 241 Url string `json:"url"` 242 } 243 244 // GetName returns ContentFieldsVideo.Name, and is useful for accessing the field via an interface. 245 func (v *ContentFieldsVideo) GetName() string { return v.Name } 246 247 // GetUrl returns ContentFieldsVideo.Url, and is useful for accessing the field via an interface. 248 func (v *ContentFieldsVideo) GetUrl() string { return v.Url } 249 250 // InnerQueryFragment includes the GraphQL fields of Query requested by the fragment InnerQueryFragment. 251 // The GraphQL type's documentation follows. 252 // 253 // Query's description is probably ignored by almost all callers. 254 type InnerQueryFragment struct { 255 RandomItem InnerQueryFragmentRandomItemContent `json:"-"` 256 RandomLeaf InnerQueryFragmentRandomLeafLeafContent `json:"-"` 257 OtherLeaf InnerQueryFragmentOtherLeafLeafContent `json:"-"` 258 } 259 260 // GetRandomItem returns InnerQueryFragment.RandomItem, and is useful for accessing the field via an interface. 261 func (v *InnerQueryFragment) GetRandomItem() InnerQueryFragmentRandomItemContent { return v.RandomItem } 262 263 // GetRandomLeaf returns InnerQueryFragment.RandomLeaf, and is useful for accessing the field via an interface. 264 func (v *InnerQueryFragment) GetRandomLeaf() InnerQueryFragmentRandomLeafLeafContent { 265 return v.RandomLeaf 266 } 267 268 // GetOtherLeaf returns InnerQueryFragment.OtherLeaf, and is useful for accessing the field via an interface. 269 func (v *InnerQueryFragment) GetOtherLeaf() InnerQueryFragmentOtherLeafLeafContent { 270 return v.OtherLeaf 271 } 272 273 func (v *InnerQueryFragment) UnmarshalJSON(b []byte) error { 274 275 if string(b) == "null" { 276 return nil 277 } 278 279 var firstPass struct { 280 *InnerQueryFragment 281 RandomItem json.RawMessage `json:"randomItem"` 282 RandomLeaf json.RawMessage `json:"randomLeaf"` 283 OtherLeaf json.RawMessage `json:"otherLeaf"` 284 graphql.NoUnmarshalJSON 285 } 286 firstPass.InnerQueryFragment = v 287 288 err := json.Unmarshal(b, &firstPass) 289 if err != nil { 290 return err 291 } 292 293 { 294 dst := &v.RandomItem 295 src := firstPass.RandomItem 296 if len(src) != 0 && string(src) != "null" { 297 err = __unmarshalInnerQueryFragmentRandomItemContent( 298 src, dst) 299 if err != nil { 300 return fmt.Errorf( 301 "Unable to unmarshal InnerQueryFragment.RandomItem: %w", err) 302 } 303 } 304 } 305 306 { 307 dst := &v.RandomLeaf 308 src := firstPass.RandomLeaf 309 if len(src) != 0 && string(src) != "null" { 310 err = __unmarshalInnerQueryFragmentRandomLeafLeafContent( 311 src, dst) 312 if err != nil { 313 return fmt.Errorf( 314 "Unable to unmarshal InnerQueryFragment.RandomLeaf: %w", err) 315 } 316 } 317 } 318 319 { 320 dst := &v.OtherLeaf 321 src := firstPass.OtherLeaf 322 if len(src) != 0 && string(src) != "null" { 323 err = __unmarshalInnerQueryFragmentOtherLeafLeafContent( 324 src, dst) 325 if err != nil { 326 return fmt.Errorf( 327 "Unable to unmarshal InnerQueryFragment.OtherLeaf: %w", err) 328 } 329 } 330 } 331 return nil 332 } 333 334 type __premarshalInnerQueryFragment struct { 335 RandomItem json.RawMessage `json:"randomItem"` 336 337 RandomLeaf json.RawMessage `json:"randomLeaf"` 338 339 OtherLeaf json.RawMessage `json:"otherLeaf"` 340 } 341 342 func (v *InnerQueryFragment) MarshalJSON() ([]byte, error) { 343 premarshaled, err := v.__premarshalJSON() 344 if err != nil { 345 return nil, err 346 } 347 return json.Marshal(premarshaled) 348 } 349 350 func (v *InnerQueryFragment) __premarshalJSON() (*__premarshalInnerQueryFragment, error) { 351 var retval __premarshalInnerQueryFragment 352 353 { 354 355 dst := &retval.RandomItem 356 src := v.RandomItem 357 var err error 358 *dst, err = __marshalInnerQueryFragmentRandomItemContent( 359 &src) 360 if err != nil { 361 return nil, fmt.Errorf( 362 "Unable to marshal InnerQueryFragment.RandomItem: %w", err) 363 } 364 } 365 { 366 367 dst := &retval.RandomLeaf 368 src := v.RandomLeaf 369 var err error 370 *dst, err = __marshalInnerQueryFragmentRandomLeafLeafContent( 371 &src) 372 if err != nil { 373 return nil, fmt.Errorf( 374 "Unable to marshal InnerQueryFragment.RandomLeaf: %w", err) 375 } 376 } 377 { 378 379 dst := &retval.OtherLeaf 380 src := v.OtherLeaf 381 var err error 382 *dst, err = __marshalInnerQueryFragmentOtherLeafLeafContent( 383 &src) 384 if err != nil { 385 return nil, fmt.Errorf( 386 "Unable to marshal InnerQueryFragment.OtherLeaf: %w", err) 387 } 388 } 389 return &retval, nil 390 } 391 392 // InnerQueryFragmentOtherLeafArticle includes the requested fields of the GraphQL type Article. 393 type InnerQueryFragmentOtherLeafArticle struct { 394 Typename string `json:"__typename"` 395 ContentFieldsArticle `json:"-"` 396 } 397 398 // GetTypename returns InnerQueryFragmentOtherLeafArticle.Typename, and is useful for accessing the field via an interface. 399 func (v *InnerQueryFragmentOtherLeafArticle) GetTypename() string { return v.Typename } 400 401 // GetName returns InnerQueryFragmentOtherLeafArticle.Name, and is useful for accessing the field via an interface. 402 func (v *InnerQueryFragmentOtherLeafArticle) GetName() string { return v.ContentFieldsArticle.Name } 403 404 // GetUrl returns InnerQueryFragmentOtherLeafArticle.Url, and is useful for accessing the field via an interface. 405 func (v *InnerQueryFragmentOtherLeafArticle) GetUrl() string { return v.ContentFieldsArticle.Url } 406 407 func (v *InnerQueryFragmentOtherLeafArticle) UnmarshalJSON(b []byte) error { 408 409 if string(b) == "null" { 410 return nil 411 } 412 413 var firstPass struct { 414 *InnerQueryFragmentOtherLeafArticle 415 graphql.NoUnmarshalJSON 416 } 417 firstPass.InnerQueryFragmentOtherLeafArticle = v 418 419 err := json.Unmarshal(b, &firstPass) 420 if err != nil { 421 return err 422 } 423 424 err = json.Unmarshal( 425 b, &v.ContentFieldsArticle) 426 if err != nil { 427 return err 428 } 429 return nil 430 } 431 432 type __premarshalInnerQueryFragmentOtherLeafArticle struct { 433 Typename string `json:"__typename"` 434 435 Name string `json:"name"` 436 437 Url string `json:"url"` 438 } 439 440 func (v *InnerQueryFragmentOtherLeafArticle) MarshalJSON() ([]byte, error) { 441 premarshaled, err := v.__premarshalJSON() 442 if err != nil { 443 return nil, err 444 } 445 return json.Marshal(premarshaled) 446 } 447 448 func (v *InnerQueryFragmentOtherLeafArticle) __premarshalJSON() (*__premarshalInnerQueryFragmentOtherLeafArticle, error) { 449 var retval __premarshalInnerQueryFragmentOtherLeafArticle 450 451 retval.Typename = v.Typename 452 retval.Name = v.ContentFieldsArticle.Name 453 retval.Url = v.ContentFieldsArticle.Url 454 return &retval, nil 455 } 456 457 // InnerQueryFragmentOtherLeafLeafContent includes the requested fields of the GraphQL interface LeafContent. 458 // 459 // InnerQueryFragmentOtherLeafLeafContent is implemented by the following types: 460 // InnerQueryFragmentOtherLeafArticle 461 // InnerQueryFragmentOtherLeafVideo 462 // The GraphQL type's documentation follows. 463 // 464 // LeafContent represents content items that can't have child-nodes. 465 type InnerQueryFragmentOtherLeafLeafContent interface { 466 implementsGraphQLInterfaceInnerQueryFragmentOtherLeafLeafContent() 467 // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). 468 GetTypename() string 469 } 470 471 func (v *InnerQueryFragmentOtherLeafArticle) implementsGraphQLInterfaceInnerQueryFragmentOtherLeafLeafContent() { 472 } 473 func (v *InnerQueryFragmentOtherLeafVideo) implementsGraphQLInterfaceInnerQueryFragmentOtherLeafLeafContent() { 474 } 475 476 func __unmarshalInnerQueryFragmentOtherLeafLeafContent(b []byte, v *InnerQueryFragmentOtherLeafLeafContent) error { 477 if string(b) == "null" { 478 return nil 479 } 480 481 var tn struct { 482 TypeName string `json:"__typename"` 483 } 484 err := json.Unmarshal(b, &tn) 485 if err != nil { 486 return err 487 } 488 489 switch tn.TypeName { 490 case "Article": 491 *v = new(InnerQueryFragmentOtherLeafArticle) 492 return json.Unmarshal(b, *v) 493 case "Video": 494 *v = new(InnerQueryFragmentOtherLeafVideo) 495 return json.Unmarshal(b, *v) 496 case "": 497 return fmt.Errorf( 498 "response was missing LeafContent.__typename") 499 default: 500 return fmt.Errorf( 501 `unexpected concrete type for InnerQueryFragmentOtherLeafLeafContent: "%v"`, tn.TypeName) 502 } 503 } 504 505 func __marshalInnerQueryFragmentOtherLeafLeafContent(v *InnerQueryFragmentOtherLeafLeafContent) ([]byte, error) { 506 507 var typename string 508 switch v := (*v).(type) { 509 case *InnerQueryFragmentOtherLeafArticle: 510 typename = "Article" 511 512 premarshaled, err := v.__premarshalJSON() 513 if err != nil { 514 return nil, err 515 } 516 result := struct { 517 TypeName string `json:"__typename"` 518 *__premarshalInnerQueryFragmentOtherLeafArticle 519 }{typename, premarshaled} 520 return json.Marshal(result) 521 case *InnerQueryFragmentOtherLeafVideo: 522 typename = "Video" 523 524 premarshaled, err := v.__premarshalJSON() 525 if err != nil { 526 return nil, err 527 } 528 result := struct { 529 TypeName string `json:"__typename"` 530 *__premarshalInnerQueryFragmentOtherLeafVideo 531 }{typename, premarshaled} 532 return json.Marshal(result) 533 case nil: 534 return []byte("null"), nil 535 default: 536 return nil, fmt.Errorf( 537 `unexpected concrete type for InnerQueryFragmentOtherLeafLeafContent: "%T"`, v) 538 } 539 } 540 541 // InnerQueryFragmentOtherLeafVideo includes the requested fields of the GraphQL type Video. 542 type InnerQueryFragmentOtherLeafVideo struct { 543 Typename string `json:"__typename"` 544 MoreVideoFields `json:"-"` 545 ContentFieldsVideo `json:"-"` 546 } 547 548 // GetTypename returns InnerQueryFragmentOtherLeafVideo.Typename, and is useful for accessing the field via an interface. 549 func (v *InnerQueryFragmentOtherLeafVideo) GetTypename() string { return v.Typename } 550 551 // GetId returns InnerQueryFragmentOtherLeafVideo.Id, and is useful for accessing the field via an interface. 552 func (v *InnerQueryFragmentOtherLeafVideo) GetId() *testutil.ID { return v.MoreVideoFields.Id } 553 554 // GetParent returns InnerQueryFragmentOtherLeafVideo.Parent, and is useful for accessing the field via an interface. 555 func (v *InnerQueryFragmentOtherLeafVideo) GetParent() *MoreVideoFieldsParentTopic { 556 return v.MoreVideoFields.Parent 557 } 558 559 // GetName returns InnerQueryFragmentOtherLeafVideo.Name, and is useful for accessing the field via an interface. 560 func (v *InnerQueryFragmentOtherLeafVideo) GetName() string { return v.ContentFieldsVideo.Name } 561 562 // GetUrl returns InnerQueryFragmentOtherLeafVideo.Url, and is useful for accessing the field via an interface. 563 func (v *InnerQueryFragmentOtherLeafVideo) GetUrl() string { return v.ContentFieldsVideo.Url } 564 565 func (v *InnerQueryFragmentOtherLeafVideo) UnmarshalJSON(b []byte) error { 566 567 if string(b) == "null" { 568 return nil 569 } 570 571 var firstPass struct { 572 *InnerQueryFragmentOtherLeafVideo 573 graphql.NoUnmarshalJSON 574 } 575 firstPass.InnerQueryFragmentOtherLeafVideo = v 576 577 err := json.Unmarshal(b, &firstPass) 578 if err != nil { 579 return err 580 } 581 582 err = json.Unmarshal( 583 b, &v.MoreVideoFields) 584 if err != nil { 585 return err 586 } 587 err = json.Unmarshal( 588 b, &v.ContentFieldsVideo) 589 if err != nil { 590 return err 591 } 592 return nil 593 } 594 595 type __premarshalInnerQueryFragmentOtherLeafVideo struct { 596 Typename string `json:"__typename"` 597 598 Id *testutil.ID `json:"id"` 599 600 Parent *MoreVideoFieldsParentTopic `json:"parent"` 601 602 Name string `json:"name"` 603 604 Url string `json:"url"` 605 } 606 607 func (v *InnerQueryFragmentOtherLeafVideo) MarshalJSON() ([]byte, error) { 608 premarshaled, err := v.__premarshalJSON() 609 if err != nil { 610 return nil, err 611 } 612 return json.Marshal(premarshaled) 613 } 614 615 func (v *InnerQueryFragmentOtherLeafVideo) __premarshalJSON() (*__premarshalInnerQueryFragmentOtherLeafVideo, error) { 616 var retval __premarshalInnerQueryFragmentOtherLeafVideo 617 618 retval.Typename = v.Typename 619 retval.Id = v.MoreVideoFields.Id 620 retval.Parent = v.MoreVideoFields.Parent 621 retval.Name = v.ContentFieldsVideo.Name 622 retval.Url = v.ContentFieldsVideo.Url 623 return &retval, nil 624 } 625 626 // InnerQueryFragmentRandomItemArticle includes the requested fields of the GraphQL type Article. 627 type InnerQueryFragmentRandomItemArticle struct { 628 Typename string `json:"__typename"` 629 // ID is the identifier of the content. 630 Id testutil.ID `json:"id"` 631 Name string `json:"name"` 632 ContentFieldsArticle `json:"-"` 633 } 634 635 // GetTypename returns InnerQueryFragmentRandomItemArticle.Typename, and is useful for accessing the field via an interface. 636 func (v *InnerQueryFragmentRandomItemArticle) GetTypename() string { return v.Typename } 637 638 // GetId returns InnerQueryFragmentRandomItemArticle.Id, and is useful for accessing the field via an interface. 639 func (v *InnerQueryFragmentRandomItemArticle) GetId() testutil.ID { return v.Id } 640 641 // GetName returns InnerQueryFragmentRandomItemArticle.Name, and is useful for accessing the field via an interface. 642 func (v *InnerQueryFragmentRandomItemArticle) GetName() string { return v.Name } 643 644 // GetUrl returns InnerQueryFragmentRandomItemArticle.Url, and is useful for accessing the field via an interface. 645 func (v *InnerQueryFragmentRandomItemArticle) GetUrl() string { return v.ContentFieldsArticle.Url } 646 647 func (v *InnerQueryFragmentRandomItemArticle) UnmarshalJSON(b []byte) error { 648 649 if string(b) == "null" { 650 return nil 651 } 652 653 var firstPass struct { 654 *InnerQueryFragmentRandomItemArticle 655 graphql.NoUnmarshalJSON 656 } 657 firstPass.InnerQueryFragmentRandomItemArticle = v 658 659 err := json.Unmarshal(b, &firstPass) 660 if err != nil { 661 return err 662 } 663 664 err = json.Unmarshal( 665 b, &v.ContentFieldsArticle) 666 if err != nil { 667 return err 668 } 669 return nil 670 } 671 672 type __premarshalInnerQueryFragmentRandomItemArticle struct { 673 Typename string `json:"__typename"` 674 675 Id testutil.ID `json:"id"` 676 677 Name string `json:"name"` 678 679 Url string `json:"url"` 680 } 681 682 func (v *InnerQueryFragmentRandomItemArticle) MarshalJSON() ([]byte, error) { 683 premarshaled, err := v.__premarshalJSON() 684 if err != nil { 685 return nil, err 686 } 687 return json.Marshal(premarshaled) 688 } 689 690 func (v *InnerQueryFragmentRandomItemArticle) __premarshalJSON() (*__premarshalInnerQueryFragmentRandomItemArticle, error) { 691 var retval __premarshalInnerQueryFragmentRandomItemArticle 692 693 retval.Typename = v.Typename 694 retval.Id = v.Id 695 retval.Name = v.Name 696 retval.Url = v.ContentFieldsArticle.Url 697 return &retval, nil 698 } 699 700 // InnerQueryFragmentRandomItemContent includes the requested fields of the GraphQL interface Content. 701 // 702 // InnerQueryFragmentRandomItemContent is implemented by the following types: 703 // InnerQueryFragmentRandomItemArticle 704 // InnerQueryFragmentRandomItemVideo 705 // InnerQueryFragmentRandomItemTopic 706 // The GraphQL type's documentation follows. 707 // 708 // Content is implemented by various types like Article, Video, and Topic. 709 type InnerQueryFragmentRandomItemContent interface { 710 implementsGraphQLInterfaceInnerQueryFragmentRandomItemContent() 711 // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). 712 GetTypename() string 713 // GetId returns the interface-field "id" from its implementation. 714 // The GraphQL interface field's documentation follows. 715 // 716 // ID is the identifier of the content. 717 GetId() testutil.ID 718 // GetName returns the interface-field "name" from its implementation. 719 GetName() string 720 ContentFields 721 } 722 723 func (v *InnerQueryFragmentRandomItemArticle) implementsGraphQLInterfaceInnerQueryFragmentRandomItemContent() { 724 } 725 func (v *InnerQueryFragmentRandomItemVideo) implementsGraphQLInterfaceInnerQueryFragmentRandomItemContent() { 726 } 727 func (v *InnerQueryFragmentRandomItemTopic) implementsGraphQLInterfaceInnerQueryFragmentRandomItemContent() { 728 } 729 730 func __unmarshalInnerQueryFragmentRandomItemContent(b []byte, v *InnerQueryFragmentRandomItemContent) error { 731 if string(b) == "null" { 732 return nil 733 } 734 735 var tn struct { 736 TypeName string `json:"__typename"` 737 } 738 err := json.Unmarshal(b, &tn) 739 if err != nil { 740 return err 741 } 742 743 switch tn.TypeName { 744 case "Article": 745 *v = new(InnerQueryFragmentRandomItemArticle) 746 return json.Unmarshal(b, *v) 747 case "Video": 748 *v = new(InnerQueryFragmentRandomItemVideo) 749 return json.Unmarshal(b, *v) 750 case "Topic": 751 *v = new(InnerQueryFragmentRandomItemTopic) 752 return json.Unmarshal(b, *v) 753 case "": 754 return fmt.Errorf( 755 "response was missing Content.__typename") 756 default: 757 return fmt.Errorf( 758 `unexpected concrete type for InnerQueryFragmentRandomItemContent: "%v"`, tn.TypeName) 759 } 760 } 761 762 func __marshalInnerQueryFragmentRandomItemContent(v *InnerQueryFragmentRandomItemContent) ([]byte, error) { 763 764 var typename string 765 switch v := (*v).(type) { 766 case *InnerQueryFragmentRandomItemArticle: 767 typename = "Article" 768 769 premarshaled, err := v.__premarshalJSON() 770 if err != nil { 771 return nil, err 772 } 773 result := struct { 774 TypeName string `json:"__typename"` 775 *__premarshalInnerQueryFragmentRandomItemArticle 776 }{typename, premarshaled} 777 return json.Marshal(result) 778 case *InnerQueryFragmentRandomItemVideo: 779 typename = "Video" 780 781 premarshaled, err := v.__premarshalJSON() 782 if err != nil { 783 return nil, err 784 } 785 result := struct { 786 TypeName string `json:"__typename"` 787 *__premarshalInnerQueryFragmentRandomItemVideo 788 }{typename, premarshaled} 789 return json.Marshal(result) 790 case *InnerQueryFragmentRandomItemTopic: 791 typename = "Topic" 792 793 premarshaled, err := v.__premarshalJSON() 794 if err != nil { 795 return nil, err 796 } 797 result := struct { 798 TypeName string `json:"__typename"` 799 *__premarshalInnerQueryFragmentRandomItemTopic 800 }{typename, premarshaled} 801 return json.Marshal(result) 802 case nil: 803 return []byte("null"), nil 804 default: 805 return nil, fmt.Errorf( 806 `unexpected concrete type for InnerQueryFragmentRandomItemContent: "%T"`, v) 807 } 808 } 809 810 // InnerQueryFragmentRandomItemTopic includes the requested fields of the GraphQL type Topic. 811 type InnerQueryFragmentRandomItemTopic struct { 812 Typename string `json:"__typename"` 813 // ID is the identifier of the content. 814 Id testutil.ID `json:"id"` 815 Name string `json:"name"` 816 ContentFieldsTopic `json:"-"` 817 } 818 819 // GetTypename returns InnerQueryFragmentRandomItemTopic.Typename, and is useful for accessing the field via an interface. 820 func (v *InnerQueryFragmentRandomItemTopic) GetTypename() string { return v.Typename } 821 822 // GetId returns InnerQueryFragmentRandomItemTopic.Id, and is useful for accessing the field via an interface. 823 func (v *InnerQueryFragmentRandomItemTopic) GetId() testutil.ID { return v.Id } 824 825 // GetName returns InnerQueryFragmentRandomItemTopic.Name, and is useful for accessing the field via an interface. 826 func (v *InnerQueryFragmentRandomItemTopic) GetName() string { return v.Name } 827 828 // GetUrl returns InnerQueryFragmentRandomItemTopic.Url, and is useful for accessing the field via an interface. 829 func (v *InnerQueryFragmentRandomItemTopic) GetUrl() string { return v.ContentFieldsTopic.Url } 830 831 func (v *InnerQueryFragmentRandomItemTopic) UnmarshalJSON(b []byte) error { 832 833 if string(b) == "null" { 834 return nil 835 } 836 837 var firstPass struct { 838 *InnerQueryFragmentRandomItemTopic 839 graphql.NoUnmarshalJSON 840 } 841 firstPass.InnerQueryFragmentRandomItemTopic = v 842 843 err := json.Unmarshal(b, &firstPass) 844 if err != nil { 845 return err 846 } 847 848 err = json.Unmarshal( 849 b, &v.ContentFieldsTopic) 850 if err != nil { 851 return err 852 } 853 return nil 854 } 855 856 type __premarshalInnerQueryFragmentRandomItemTopic struct { 857 Typename string `json:"__typename"` 858 859 Id testutil.ID `json:"id"` 860 861 Name string `json:"name"` 862 863 Url string `json:"url"` 864 } 865 866 func (v *InnerQueryFragmentRandomItemTopic) MarshalJSON() ([]byte, error) { 867 premarshaled, err := v.__premarshalJSON() 868 if err != nil { 869 return nil, err 870 } 871 return json.Marshal(premarshaled) 872 } 873 874 func (v *InnerQueryFragmentRandomItemTopic) __premarshalJSON() (*__premarshalInnerQueryFragmentRandomItemTopic, error) { 875 var retval __premarshalInnerQueryFragmentRandomItemTopic 876 877 retval.Typename = v.Typename 878 retval.Id = v.Id 879 retval.Name = v.Name 880 retval.Url = v.ContentFieldsTopic.Url 881 return &retval, nil 882 } 883 884 // InnerQueryFragmentRandomItemVideo includes the requested fields of the GraphQL type Video. 885 type InnerQueryFragmentRandomItemVideo struct { 886 Typename string `json:"__typename"` 887 // ID is the identifier of the content. 888 Id testutil.ID `json:"id"` 889 Name string `json:"name"` 890 VideoFields `json:"-"` 891 ContentFieldsVideo `json:"-"` 892 } 893 894 // GetTypename returns InnerQueryFragmentRandomItemVideo.Typename, and is useful for accessing the field via an interface. 895 func (v *InnerQueryFragmentRandomItemVideo) GetTypename() string { return v.Typename } 896 897 // GetId returns InnerQueryFragmentRandomItemVideo.Id, and is useful for accessing the field via an interface. 898 func (v *InnerQueryFragmentRandomItemVideo) GetId() testutil.ID { return v.Id } 899 900 // GetName returns InnerQueryFragmentRandomItemVideo.Name, and is useful for accessing the field via an interface. 901 func (v *InnerQueryFragmentRandomItemVideo) GetName() string { return v.Name } 902 903 // GetUrl returns InnerQueryFragmentRandomItemVideo.Url, and is useful for accessing the field via an interface. 904 func (v *InnerQueryFragmentRandomItemVideo) GetUrl() string { return v.VideoFields.Url } 905 906 // GetDuration returns InnerQueryFragmentRandomItemVideo.Duration, and is useful for accessing the field via an interface. 907 func (v *InnerQueryFragmentRandomItemVideo) GetDuration() int { return v.VideoFields.Duration } 908 909 // GetThumbnail returns InnerQueryFragmentRandomItemVideo.Thumbnail, and is useful for accessing the field via an interface. 910 func (v *InnerQueryFragmentRandomItemVideo) GetThumbnail() VideoFieldsThumbnail { 911 return v.VideoFields.Thumbnail 912 } 913 914 func (v *InnerQueryFragmentRandomItemVideo) UnmarshalJSON(b []byte) error { 915 916 if string(b) == "null" { 917 return nil 918 } 919 920 var firstPass struct { 921 *InnerQueryFragmentRandomItemVideo 922 graphql.NoUnmarshalJSON 923 } 924 firstPass.InnerQueryFragmentRandomItemVideo = v 925 926 err := json.Unmarshal(b, &firstPass) 927 if err != nil { 928 return err 929 } 930 931 err = json.Unmarshal( 932 b, &v.VideoFields) 933 if err != nil { 934 return err 935 } 936 err = json.Unmarshal( 937 b, &v.ContentFieldsVideo) 938 if err != nil { 939 return err 940 } 941 return nil 942 } 943 944 type __premarshalInnerQueryFragmentRandomItemVideo struct { 945 Typename string `json:"__typename"` 946 947 Id testutil.ID `json:"id"` 948 949 Name string `json:"name"` 950 951 Url string `json:"url"` 952 953 Duration int `json:"duration"` 954 955 Thumbnail VideoFieldsThumbnail `json:"thumbnail"` 956 } 957 958 func (v *InnerQueryFragmentRandomItemVideo) MarshalJSON() ([]byte, error) { 959 premarshaled, err := v.__premarshalJSON() 960 if err != nil { 961 return nil, err 962 } 963 return json.Marshal(premarshaled) 964 } 965 966 func (v *InnerQueryFragmentRandomItemVideo) __premarshalJSON() (*__premarshalInnerQueryFragmentRandomItemVideo, error) { 967 var retval __premarshalInnerQueryFragmentRandomItemVideo 968 969 retval.Typename = v.Typename 970 retval.Id = v.Id 971 retval.Name = v.Name 972 retval.Url = v.VideoFields.Url 973 retval.Duration = v.VideoFields.Duration 974 retval.Thumbnail = v.VideoFields.Thumbnail 975 return &retval, nil 976 } 977 978 // InnerQueryFragmentRandomLeafArticle includes the requested fields of the GraphQL type Article. 979 type InnerQueryFragmentRandomLeafArticle struct { 980 Typename string `json:"__typename"` 981 ContentFieldsArticle `json:"-"` 982 } 983 984 // GetTypename returns InnerQueryFragmentRandomLeafArticle.Typename, and is useful for accessing the field via an interface. 985 func (v *InnerQueryFragmentRandomLeafArticle) GetTypename() string { return v.Typename } 986 987 // GetName returns InnerQueryFragmentRandomLeafArticle.Name, and is useful for accessing the field via an interface. 988 func (v *InnerQueryFragmentRandomLeafArticle) GetName() string { return v.ContentFieldsArticle.Name } 989 990 // GetUrl returns InnerQueryFragmentRandomLeafArticle.Url, and is useful for accessing the field via an interface. 991 func (v *InnerQueryFragmentRandomLeafArticle) GetUrl() string { return v.ContentFieldsArticle.Url } 992 993 func (v *InnerQueryFragmentRandomLeafArticle) UnmarshalJSON(b []byte) error { 994 995 if string(b) == "null" { 996 return nil 997 } 998 999 var firstPass struct { 1000 *InnerQueryFragmentRandomLeafArticle 1001 graphql.NoUnmarshalJSON 1002 } 1003 firstPass.InnerQueryFragmentRandomLeafArticle = v 1004 1005 err := json.Unmarshal(b, &firstPass) 1006 if err != nil { 1007 return err 1008 } 1009 1010 err = json.Unmarshal( 1011 b, &v.ContentFieldsArticle) 1012 if err != nil { 1013 return err 1014 } 1015 return nil 1016 } 1017 1018 type __premarshalInnerQueryFragmentRandomLeafArticle struct { 1019 Typename string `json:"__typename"` 1020 1021 Name string `json:"name"` 1022 1023 Url string `json:"url"` 1024 } 1025 1026 func (v *InnerQueryFragmentRandomLeafArticle) MarshalJSON() ([]byte, error) { 1027 premarshaled, err := v.__premarshalJSON() 1028 if err != nil { 1029 return nil, err 1030 } 1031 return json.Marshal(premarshaled) 1032 } 1033 1034 func (v *InnerQueryFragmentRandomLeafArticle) __premarshalJSON() (*__premarshalInnerQueryFragmentRandomLeafArticle, error) { 1035 var retval __premarshalInnerQueryFragmentRandomLeafArticle 1036 1037 retval.Typename = v.Typename 1038 retval.Name = v.ContentFieldsArticle.Name 1039 retval.Url = v.ContentFieldsArticle.Url 1040 return &retval, nil 1041 } 1042 1043 // InnerQueryFragmentRandomLeafLeafContent includes the requested fields of the GraphQL interface LeafContent. 1044 // 1045 // InnerQueryFragmentRandomLeafLeafContent is implemented by the following types: 1046 // InnerQueryFragmentRandomLeafArticle 1047 // InnerQueryFragmentRandomLeafVideo 1048 // The GraphQL type's documentation follows. 1049 // 1050 // LeafContent represents content items that can't have child-nodes. 1051 type InnerQueryFragmentRandomLeafLeafContent interface { 1052 implementsGraphQLInterfaceInnerQueryFragmentRandomLeafLeafContent() 1053 // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). 1054 GetTypename() string 1055 } 1056 1057 func (v *InnerQueryFragmentRandomLeafArticle) implementsGraphQLInterfaceInnerQueryFragmentRandomLeafLeafContent() { 1058 } 1059 func (v *InnerQueryFragmentRandomLeafVideo) implementsGraphQLInterfaceInnerQueryFragmentRandomLeafLeafContent() { 1060 } 1061 1062 func __unmarshalInnerQueryFragmentRandomLeafLeafContent(b []byte, v *InnerQueryFragmentRandomLeafLeafContent) error { 1063 if string(b) == "null" { 1064 return nil 1065 } 1066 1067 var tn struct { 1068 TypeName string `json:"__typename"` 1069 } 1070 err := json.Unmarshal(b, &tn) 1071 if err != nil { 1072 return err 1073 } 1074 1075 switch tn.TypeName { 1076 case "Article": 1077 *v = new(InnerQueryFragmentRandomLeafArticle) 1078 return json.Unmarshal(b, *v) 1079 case "Video": 1080 *v = new(InnerQueryFragmentRandomLeafVideo) 1081 return json.Unmarshal(b, *v) 1082 case "": 1083 return fmt.Errorf( 1084 "response was missing LeafContent.__typename") 1085 default: 1086 return fmt.Errorf( 1087 `unexpected concrete type for InnerQueryFragmentRandomLeafLeafContent: "%v"`, tn.TypeName) 1088 } 1089 } 1090 1091 func __marshalInnerQueryFragmentRandomLeafLeafContent(v *InnerQueryFragmentRandomLeafLeafContent) ([]byte, error) { 1092 1093 var typename string 1094 switch v := (*v).(type) { 1095 case *InnerQueryFragmentRandomLeafArticle: 1096 typename = "Article" 1097 1098 premarshaled, err := v.__premarshalJSON() 1099 if err != nil { 1100 return nil, err 1101 } 1102 result := struct { 1103 TypeName string `json:"__typename"` 1104 *__premarshalInnerQueryFragmentRandomLeafArticle 1105 }{typename, premarshaled} 1106 return json.Marshal(result) 1107 case *InnerQueryFragmentRandomLeafVideo: 1108 typename = "Video" 1109 1110 premarshaled, err := v.__premarshalJSON() 1111 if err != nil { 1112 return nil, err 1113 } 1114 result := struct { 1115 TypeName string `json:"__typename"` 1116 *__premarshalInnerQueryFragmentRandomLeafVideo 1117 }{typename, premarshaled} 1118 return json.Marshal(result) 1119 case nil: 1120 return []byte("null"), nil 1121 default: 1122 return nil, fmt.Errorf( 1123 `unexpected concrete type for InnerQueryFragmentRandomLeafLeafContent: "%T"`, v) 1124 } 1125 } 1126 1127 // InnerQueryFragmentRandomLeafVideo includes the requested fields of the GraphQL type Video. 1128 type InnerQueryFragmentRandomLeafVideo struct { 1129 Typename string `json:"__typename"` 1130 VideoFields `json:"-"` 1131 MoreVideoFields `json:"-"` 1132 ContentFieldsVideo `json:"-"` 1133 } 1134 1135 // GetTypename returns InnerQueryFragmentRandomLeafVideo.Typename, and is useful for accessing the field via an interface. 1136 func (v *InnerQueryFragmentRandomLeafVideo) GetTypename() string { return v.Typename } 1137 1138 // GetId returns InnerQueryFragmentRandomLeafVideo.Id, and is useful for accessing the field via an interface. 1139 func (v *InnerQueryFragmentRandomLeafVideo) GetId() testutil.ID { return v.VideoFields.Id } 1140 1141 // GetName returns InnerQueryFragmentRandomLeafVideo.Name, and is useful for accessing the field via an interface. 1142 func (v *InnerQueryFragmentRandomLeafVideo) GetName() string { return v.VideoFields.Name } 1143 1144 // GetUrl returns InnerQueryFragmentRandomLeafVideo.Url, and is useful for accessing the field via an interface. 1145 func (v *InnerQueryFragmentRandomLeafVideo) GetUrl() string { return v.VideoFields.Url } 1146 1147 // GetDuration returns InnerQueryFragmentRandomLeafVideo.Duration, and is useful for accessing the field via an interface. 1148 func (v *InnerQueryFragmentRandomLeafVideo) GetDuration() int { return v.VideoFields.Duration } 1149 1150 // GetThumbnail returns InnerQueryFragmentRandomLeafVideo.Thumbnail, and is useful for accessing the field via an interface. 1151 func (v *InnerQueryFragmentRandomLeafVideo) GetThumbnail() VideoFieldsThumbnail { 1152 return v.VideoFields.Thumbnail 1153 } 1154 1155 // GetParent returns InnerQueryFragmentRandomLeafVideo.Parent, and is useful for accessing the field via an interface. 1156 func (v *InnerQueryFragmentRandomLeafVideo) GetParent() *MoreVideoFieldsParentTopic { 1157 return v.MoreVideoFields.Parent 1158 } 1159 1160 func (v *InnerQueryFragmentRandomLeafVideo) UnmarshalJSON(b []byte) error { 1161 1162 if string(b) == "null" { 1163 return nil 1164 } 1165 1166 var firstPass struct { 1167 *InnerQueryFragmentRandomLeafVideo 1168 graphql.NoUnmarshalJSON 1169 } 1170 firstPass.InnerQueryFragmentRandomLeafVideo = v 1171 1172 err := json.Unmarshal(b, &firstPass) 1173 if err != nil { 1174 return err 1175 } 1176 1177 err = json.Unmarshal( 1178 b, &v.VideoFields) 1179 if err != nil { 1180 return err 1181 } 1182 err = json.Unmarshal( 1183 b, &v.MoreVideoFields) 1184 if err != nil { 1185 return err 1186 } 1187 err = json.Unmarshal( 1188 b, &v.ContentFieldsVideo) 1189 if err != nil { 1190 return err 1191 } 1192 return nil 1193 } 1194 1195 type __premarshalInnerQueryFragmentRandomLeafVideo struct { 1196 Typename string `json:"__typename"` 1197 1198 Id testutil.ID `json:"id"` 1199 1200 Name string `json:"name"` 1201 1202 Url string `json:"url"` 1203 1204 Duration int `json:"duration"` 1205 1206 Thumbnail VideoFieldsThumbnail `json:"thumbnail"` 1207 1208 Parent *MoreVideoFieldsParentTopic `json:"parent"` 1209 } 1210 1211 func (v *InnerQueryFragmentRandomLeafVideo) MarshalJSON() ([]byte, error) { 1212 premarshaled, err := v.__premarshalJSON() 1213 if err != nil { 1214 return nil, err 1215 } 1216 return json.Marshal(premarshaled) 1217 } 1218 1219 func (v *InnerQueryFragmentRandomLeafVideo) __premarshalJSON() (*__premarshalInnerQueryFragmentRandomLeafVideo, error) { 1220 var retval __premarshalInnerQueryFragmentRandomLeafVideo 1221 1222 retval.Typename = v.Typename 1223 retval.Id = v.VideoFields.Id 1224 retval.Name = v.VideoFields.Name 1225 retval.Url = v.VideoFields.Url 1226 retval.Duration = v.VideoFields.Duration 1227 retval.Thumbnail = v.VideoFields.Thumbnail 1228 retval.Parent = v.MoreVideoFields.Parent 1229 return &retval, nil 1230 } 1231 1232 // MoreVideoFields includes the GraphQL fields of Video requested by the fragment MoreVideoFields. 1233 type MoreVideoFields struct { 1234 // ID is documented in the Content interface. 1235 Id *testutil.ID `json:"id"` 1236 Parent *MoreVideoFieldsParentTopic `json:"parent"` 1237 } 1238 1239 // GetId returns MoreVideoFields.Id, and is useful for accessing the field via an interface. 1240 func (v *MoreVideoFields) GetId() *testutil.ID { return v.Id } 1241 1242 // GetParent returns MoreVideoFields.Parent, and is useful for accessing the field via an interface. 1243 func (v *MoreVideoFields) GetParent() *MoreVideoFieldsParentTopic { return v.Parent } 1244 1245 // MoreVideoFieldsParentTopic includes the requested fields of the GraphQL type Topic. 1246 type MoreVideoFieldsParentTopic struct { 1247 Name *string `json:"name"` 1248 Url *string `json:"url"` 1249 ContentFieldsTopic `json:"-"` 1250 Children []MoreVideoFieldsParentTopicChildrenContent `json:"-"` 1251 } 1252 1253 // GetName returns MoreVideoFieldsParentTopic.Name, and is useful for accessing the field via an interface. 1254 func (v *MoreVideoFieldsParentTopic) GetName() *string { return v.Name } 1255 1256 // GetUrl returns MoreVideoFieldsParentTopic.Url, and is useful for accessing the field via an interface. 1257 func (v *MoreVideoFieldsParentTopic) GetUrl() *string { return v.Url } 1258 1259 // GetChildren returns MoreVideoFieldsParentTopic.Children, and is useful for accessing the field via an interface. 1260 func (v *MoreVideoFieldsParentTopic) GetChildren() []MoreVideoFieldsParentTopicChildrenContent { 1261 return v.Children 1262 } 1263 1264 func (v *MoreVideoFieldsParentTopic) UnmarshalJSON(b []byte) error { 1265 1266 if string(b) == "null" { 1267 return nil 1268 } 1269 1270 var firstPass struct { 1271 *MoreVideoFieldsParentTopic 1272 Children []json.RawMessage `json:"children"` 1273 graphql.NoUnmarshalJSON 1274 } 1275 firstPass.MoreVideoFieldsParentTopic = v 1276 1277 err := json.Unmarshal(b, &firstPass) 1278 if err != nil { 1279 return err 1280 } 1281 1282 err = json.Unmarshal( 1283 b, &v.ContentFieldsTopic) 1284 if err != nil { 1285 return err 1286 } 1287 1288 { 1289 dst := &v.Children 1290 src := firstPass.Children 1291 *dst = make( 1292 []MoreVideoFieldsParentTopicChildrenContent, 1293 len(src)) 1294 for i, src := range src { 1295 dst := &(*dst)[i] 1296 if len(src) != 0 && string(src) != "null" { 1297 err = __unmarshalMoreVideoFieldsParentTopicChildrenContent( 1298 src, dst) 1299 if err != nil { 1300 return fmt.Errorf( 1301 "Unable to unmarshal MoreVideoFieldsParentTopic.Children: %w", err) 1302 } 1303 } 1304 } 1305 } 1306 return nil 1307 } 1308 1309 type __premarshalMoreVideoFieldsParentTopic struct { 1310 Name *string `json:"name"` 1311 1312 Url *string `json:"url"` 1313 1314 Children []json.RawMessage `json:"children"` 1315 } 1316 1317 func (v *MoreVideoFieldsParentTopic) MarshalJSON() ([]byte, error) { 1318 premarshaled, err := v.__premarshalJSON() 1319 if err != nil { 1320 return nil, err 1321 } 1322 return json.Marshal(premarshaled) 1323 } 1324 1325 func (v *MoreVideoFieldsParentTopic) __premarshalJSON() (*__premarshalMoreVideoFieldsParentTopic, error) { 1326 var retval __premarshalMoreVideoFieldsParentTopic 1327 1328 retval.Name = v.Name 1329 retval.Url = v.Url 1330 { 1331 1332 dst := &retval.Children 1333 src := v.Children 1334 *dst = make( 1335 []json.RawMessage, 1336 len(src)) 1337 for i, src := range src { 1338 dst := &(*dst)[i] 1339 var err error 1340 *dst, err = __marshalMoreVideoFieldsParentTopicChildrenContent( 1341 &src) 1342 if err != nil { 1343 return nil, fmt.Errorf( 1344 "Unable to marshal MoreVideoFieldsParentTopic.Children: %w", err) 1345 } 1346 } 1347 } 1348 return &retval, nil 1349 } 1350 1351 // MoreVideoFieldsParentTopicChildrenArticle includes the requested fields of the GraphQL type Article. 1352 type MoreVideoFieldsParentTopicChildrenArticle struct { 1353 Typename *string `json:"__typename"` 1354 } 1355 1356 // GetTypename returns MoreVideoFieldsParentTopicChildrenArticle.Typename, and is useful for accessing the field via an interface. 1357 func (v *MoreVideoFieldsParentTopicChildrenArticle) GetTypename() *string { return v.Typename } 1358 1359 // MoreVideoFieldsParentTopicChildrenContent includes the requested fields of the GraphQL interface Content. 1360 // 1361 // MoreVideoFieldsParentTopicChildrenContent is implemented by the following types: 1362 // MoreVideoFieldsParentTopicChildrenArticle 1363 // MoreVideoFieldsParentTopicChildrenVideo 1364 // MoreVideoFieldsParentTopicChildrenTopic 1365 // The GraphQL type's documentation follows. 1366 // 1367 // Content is implemented by various types like Article, Video, and Topic. 1368 type MoreVideoFieldsParentTopicChildrenContent interface { 1369 implementsGraphQLInterfaceMoreVideoFieldsParentTopicChildrenContent() 1370 // GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values). 1371 GetTypename() *string 1372 } 1373 1374 func (v *MoreVideoFieldsParentTopicChildrenArticle) implementsGraphQLInterfaceMoreVideoFieldsParentTopicChildrenContent() { 1375 } 1376 func (v *MoreVideoFieldsParentTopicChildrenVideo) implementsGraphQLInterfaceMoreVideoFieldsParentTopicChildrenContent() { 1377 } 1378 func (v *MoreVideoFieldsParentTopicChildrenTopic) implementsGraphQLInterfaceMoreVideoFieldsParentTopicChildrenContent() { 1379 } 1380 1381 func __unmarshalMoreVideoFieldsParentTopicChildrenContent(b []byte, v *MoreVideoFieldsParentTopicChildrenContent) error { 1382 if string(b) == "null" { 1383 return nil 1384 } 1385 1386 var tn struct { 1387 TypeName string `json:"__typename"` 1388 } 1389 err := json.Unmarshal(b, &tn) 1390 if err != nil { 1391 return err 1392 } 1393 1394 switch tn.TypeName { 1395 case "Article": 1396 *v = new(MoreVideoFieldsParentTopicChildrenArticle) 1397 return json.Unmarshal(b, *v) 1398 case "Video": 1399 *v = new(MoreVideoFieldsParentTopicChildrenVideo) 1400 return json.Unmarshal(b, *v) 1401 case "Topic": 1402 *v = new(MoreVideoFieldsParentTopicChildrenTopic) 1403 return json.Unmarshal(b, *v) 1404 case "": 1405 return fmt.Errorf( 1406 "response was missing Content.__typename") 1407 default: 1408 return fmt.Errorf( 1409 `unexpected concrete type for MoreVideoFieldsParentTopicChildrenContent: "%v"`, tn.TypeName) 1410 } 1411 } 1412 1413 func __marshalMoreVideoFieldsParentTopicChildrenContent(v *MoreVideoFieldsParentTopicChildrenContent) ([]byte, error) { 1414 1415 var typename string 1416 switch v := (*v).(type) { 1417 case *MoreVideoFieldsParentTopicChildrenArticle: 1418 typename = "Article" 1419 1420 result := struct { 1421 TypeName string `json:"__typename"` 1422 *MoreVideoFieldsParentTopicChildrenArticle 1423 }{typename, v} 1424 return json.Marshal(result) 1425 case *MoreVideoFieldsParentTopicChildrenVideo: 1426 typename = "Video" 1427 1428 premarshaled, err := v.__premarshalJSON() 1429 if err != nil { 1430 return nil, err 1431 } 1432 result := struct { 1433 TypeName string `json:"__typename"` 1434 *__premarshalMoreVideoFieldsParentTopicChildrenVideo 1435 }{typename, premarshaled} 1436 return json.Marshal(result) 1437 case *MoreVideoFieldsParentTopicChildrenTopic: 1438 typename = "Topic" 1439 1440 result := struct { 1441 TypeName string `json:"__typename"` 1442 *MoreVideoFieldsParentTopicChildrenTopic 1443 }{typename, v} 1444 return json.Marshal(result) 1445 case nil: 1446 return []byte("null"), nil 1447 default: 1448 return nil, fmt.Errorf( 1449 `unexpected concrete type for MoreVideoFieldsParentTopicChildrenContent: "%T"`, v) 1450 } 1451 } 1452 1453 // MoreVideoFieldsParentTopicChildrenTopic includes the requested fields of the GraphQL type Topic. 1454 type MoreVideoFieldsParentTopicChildrenTopic struct { 1455 Typename *string `json:"__typename"` 1456 } 1457 1458 // GetTypename returns MoreVideoFieldsParentTopicChildrenTopic.Typename, and is useful for accessing the field via an interface. 1459 func (v *MoreVideoFieldsParentTopicChildrenTopic) GetTypename() *string { return v.Typename } 1460 1461 // MoreVideoFieldsParentTopicChildrenVideo includes the requested fields of the GraphQL type Video. 1462 type MoreVideoFieldsParentTopicChildrenVideo struct { 1463 Typename *string `json:"__typename"` 1464 VideoFields `json:"-"` 1465 } 1466 1467 // GetTypename returns MoreVideoFieldsParentTopicChildrenVideo.Typename, and is useful for accessing the field via an interface. 1468 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetTypename() *string { return v.Typename } 1469 1470 // GetId returns MoreVideoFieldsParentTopicChildrenVideo.Id, and is useful for accessing the field via an interface. 1471 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetId() testutil.ID { return v.VideoFields.Id } 1472 1473 // GetName returns MoreVideoFieldsParentTopicChildrenVideo.Name, and is useful for accessing the field via an interface. 1474 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetName() string { return v.VideoFields.Name } 1475 1476 // GetUrl returns MoreVideoFieldsParentTopicChildrenVideo.Url, and is useful for accessing the field via an interface. 1477 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetUrl() string { return v.VideoFields.Url } 1478 1479 // GetDuration returns MoreVideoFieldsParentTopicChildrenVideo.Duration, and is useful for accessing the field via an interface. 1480 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetDuration() int { return v.VideoFields.Duration } 1481 1482 // GetThumbnail returns MoreVideoFieldsParentTopicChildrenVideo.Thumbnail, and is useful for accessing the field via an interface. 1483 func (v *MoreVideoFieldsParentTopicChildrenVideo) GetThumbnail() VideoFieldsThumbnail { 1484 return v.VideoFields.Thumbnail 1485 } 1486 1487 func (v *MoreVideoFieldsParentTopicChildrenVideo) UnmarshalJSON(b []byte) error { 1488 1489 if string(b) == "null" { 1490 return nil 1491 } 1492 1493 var firstPass struct { 1494 *MoreVideoFieldsParentTopicChildrenVideo 1495 graphql.NoUnmarshalJSON 1496 } 1497 firstPass.MoreVideoFieldsParentTopicChildrenVideo = v 1498 1499 err := json.Unmarshal(b, &firstPass) 1500 if err != nil { 1501 return err 1502 } 1503 1504 err = json.Unmarshal( 1505 b, &v.VideoFields) 1506 if err != nil { 1507 return err 1508 } 1509 return nil 1510 } 1511 1512 type __premarshalMoreVideoFieldsParentTopicChildrenVideo struct { 1513 Typename *string `json:"__typename"` 1514 1515 Id testutil.ID `json:"id"` 1516 1517 Name string `json:"name"` 1518 1519 Url string `json:"url"` 1520 1521 Duration int `json:"duration"` 1522 1523 Thumbnail VideoFieldsThumbnail `json:"thumbnail"` 1524 } 1525 1526 func (v *MoreVideoFieldsParentTopicChildrenVideo) MarshalJSON() ([]byte, error) { 1527 premarshaled, err := v.__premarshalJSON() 1528 if err != nil { 1529 return nil, err 1530 } 1531 return json.Marshal(premarshaled) 1532 } 1533 1534 func (v *MoreVideoFieldsParentTopicChildrenVideo) __premarshalJSON() (*__premarshalMoreVideoFieldsParentTopicChildrenVideo, error) { 1535 var retval __premarshalMoreVideoFieldsParentTopicChildrenVideo 1536 1537 retval.Typename = v.Typename 1538 retval.Id = v.VideoFields.Id 1539 retval.Name = v.VideoFields.Name 1540 retval.Url = v.VideoFields.Url 1541 retval.Duration = v.VideoFields.Duration 1542 retval.Thumbnail = v.VideoFields.Thumbnail 1543 return &retval, nil 1544 } 1545 1546 // QueryFragment includes the GraphQL fields of Query requested by the fragment QueryFragment. 1547 // The GraphQL type's documentation follows. 1548 // 1549 // Query's description is probably ignored by almost all callers. 1550 type QueryFragment struct { 1551 InnerQueryFragment `json:"-"` 1552 } 1553 1554 // GetRandomItem returns QueryFragment.RandomItem, and is useful for accessing the field via an interface. 1555 func (v *QueryFragment) GetRandomItem() InnerQueryFragmentRandomItemContent { 1556 return v.InnerQueryFragment.RandomItem 1557 } 1558 1559 // GetRandomLeaf returns QueryFragment.RandomLeaf, and is useful for accessing the field via an interface. 1560 func (v *QueryFragment) GetRandomLeaf() InnerQueryFragmentRandomLeafLeafContent { 1561 return v.InnerQueryFragment.RandomLeaf 1562 } 1563 1564 // GetOtherLeaf returns QueryFragment.OtherLeaf, and is useful for accessing the field via an interface. 1565 func (v *QueryFragment) GetOtherLeaf() InnerQueryFragmentOtherLeafLeafContent { 1566 return v.InnerQueryFragment.OtherLeaf 1567 } 1568 1569 func (v *QueryFragment) UnmarshalJSON(b []byte) error { 1570 1571 if string(b) == "null" { 1572 return nil 1573 } 1574 1575 var firstPass struct { 1576 *QueryFragment 1577 graphql.NoUnmarshalJSON 1578 } 1579 firstPass.QueryFragment = v 1580 1581 err := json.Unmarshal(b, &firstPass) 1582 if err != nil { 1583 return err 1584 } 1585 1586 err = json.Unmarshal( 1587 b, &v.InnerQueryFragment) 1588 if err != nil { 1589 return err 1590 } 1591 return nil 1592 } 1593 1594 type __premarshalQueryFragment struct { 1595 RandomItem json.RawMessage `json:"randomItem"` 1596 1597 RandomLeaf json.RawMessage `json:"randomLeaf"` 1598 1599 OtherLeaf json.RawMessage `json:"otherLeaf"` 1600 } 1601 1602 func (v *QueryFragment) MarshalJSON() ([]byte, error) { 1603 premarshaled, err := v.__premarshalJSON() 1604 if err != nil { 1605 return nil, err 1606 } 1607 return json.Marshal(premarshaled) 1608 } 1609 1610 func (v *QueryFragment) __premarshalJSON() (*__premarshalQueryFragment, error) { 1611 var retval __premarshalQueryFragment 1612 1613 { 1614 1615 dst := &retval.RandomItem 1616 src := v.InnerQueryFragment.RandomItem 1617 var err error 1618 *dst, err = __marshalInnerQueryFragmentRandomItemContent( 1619 &src) 1620 if err != nil { 1621 return nil, fmt.Errorf( 1622 "Unable to marshal QueryFragment.InnerQueryFragment.RandomItem: %w", err) 1623 } 1624 } 1625 { 1626 1627 dst := &retval.RandomLeaf 1628 src := v.InnerQueryFragment.RandomLeaf 1629 var err error 1630 *dst, err = __marshalInnerQueryFragmentRandomLeafLeafContent( 1631 &src) 1632 if err != nil { 1633 return nil, fmt.Errorf( 1634 "Unable to marshal QueryFragment.InnerQueryFragment.RandomLeaf: %w", err) 1635 } 1636 } 1637 { 1638 1639 dst := &retval.OtherLeaf 1640 src := v.InnerQueryFragment.OtherLeaf 1641 var err error 1642 *dst, err = __marshalInnerQueryFragmentOtherLeafLeafContent( 1643 &src) 1644 if err != nil { 1645 return nil, fmt.Errorf( 1646 "Unable to marshal QueryFragment.InnerQueryFragment.OtherLeaf: %w", err) 1647 } 1648 } 1649 return &retval, nil 1650 } 1651 1652 // VideoFields includes the GraphQL fields of Video requested by the fragment VideoFields. 1653 type VideoFields struct { 1654 // ID is documented in the Content interface. 1655 Id testutil.ID `json:"id"` 1656 Name string `json:"name"` 1657 Url string `json:"url"` 1658 Duration int `json:"duration"` 1659 Thumbnail VideoFieldsThumbnail `json:"thumbnail"` 1660 ContentFieldsVideo `json:"-"` 1661 } 1662 1663 // GetId returns VideoFields.Id, and is useful for accessing the field via an interface. 1664 func (v *VideoFields) GetId() testutil.ID { return v.Id } 1665 1666 // GetName returns VideoFields.Name, and is useful for accessing the field via an interface. 1667 func (v *VideoFields) GetName() string { return v.Name } 1668 1669 // GetUrl returns VideoFields.Url, and is useful for accessing the field via an interface. 1670 func (v *VideoFields) GetUrl() string { return v.Url } 1671 1672 // GetDuration returns VideoFields.Duration, and is useful for accessing the field via an interface. 1673 func (v *VideoFields) GetDuration() int { return v.Duration } 1674 1675 // GetThumbnail returns VideoFields.Thumbnail, and is useful for accessing the field via an interface. 1676 func (v *VideoFields) GetThumbnail() VideoFieldsThumbnail { return v.Thumbnail } 1677 1678 func (v *VideoFields) UnmarshalJSON(b []byte) error { 1679 1680 if string(b) == "null" { 1681 return nil 1682 } 1683 1684 var firstPass struct { 1685 *VideoFields 1686 graphql.NoUnmarshalJSON 1687 } 1688 firstPass.VideoFields = v 1689 1690 err := json.Unmarshal(b, &firstPass) 1691 if err != nil { 1692 return err 1693 } 1694 1695 err = json.Unmarshal( 1696 b, &v.ContentFieldsVideo) 1697 if err != nil { 1698 return err 1699 } 1700 return nil 1701 } 1702 1703 type __premarshalVideoFields struct { 1704 Id testutil.ID `json:"id"` 1705 1706 Name string `json:"name"` 1707 1708 Url string `json:"url"` 1709 1710 Duration int `json:"duration"` 1711 1712 Thumbnail VideoFieldsThumbnail `json:"thumbnail"` 1713 } 1714 1715 func (v *VideoFields) MarshalJSON() ([]byte, error) { 1716 premarshaled, err := v.__premarshalJSON() 1717 if err != nil { 1718 return nil, err 1719 } 1720 return json.Marshal(premarshaled) 1721 } 1722 1723 func (v *VideoFields) __premarshalJSON() (*__premarshalVideoFields, error) { 1724 var retval __premarshalVideoFields 1725 1726 retval.Id = v.Id 1727 retval.Name = v.Name 1728 retval.Url = v.Url 1729 retval.Duration = v.Duration 1730 retval.Thumbnail = v.Thumbnail 1731 return &retval, nil 1732 } 1733 1734 // VideoFieldsThumbnail includes the requested fields of the GraphQL type Thumbnail. 1735 type VideoFieldsThumbnail struct { 1736 Id testutil.ID `json:"id"` 1737 } 1738 1739 // GetId returns VideoFieldsThumbnail.Id, and is useful for accessing the field via an interface. 1740 func (v *VideoFieldsThumbnail) GetId() testutil.ID { return v.Id } 1741 1742 func ComplexNamedFragments( 1743 client graphql.Client, 1744 ) (*ComplexNamedFragmentsResponse, error) { 1745 req := &graphql.Request{ 1746 OpName: "ComplexNamedFragments", 1747 Query: ` 1748 query ComplexNamedFragments { 1749 ... on Query { 1750 ... QueryFragment 1751 } 1752 } 1753 fragment QueryFragment on Query { 1754 ... InnerQueryFragment 1755 } 1756 fragment InnerQueryFragment on Query { 1757 randomItem { 1758 __typename 1759 id 1760 name 1761 ... VideoFields 1762 ... ContentFields 1763 } 1764 randomLeaf { 1765 __typename 1766 ... VideoFields 1767 ... MoreVideoFields 1768 ... ContentFields 1769 } 1770 otherLeaf: randomLeaf { 1771 __typename 1772 ... on Video { 1773 ... MoreVideoFields 1774 ... ContentFields 1775 } 1776 ... ContentFields 1777 } 1778 } 1779 fragment VideoFields on Video { 1780 id 1781 name 1782 url 1783 duration 1784 thumbnail { 1785 id 1786 } 1787 ... ContentFields 1788 } 1789 fragment ContentFields on Content { 1790 name 1791 url 1792 } 1793 fragment MoreVideoFields on Video { 1794 id 1795 parent { 1796 name 1797 url 1798 ... ContentFields 1799 children { 1800 __typename 1801 ... VideoFields 1802 } 1803 } 1804 } 1805 `, 1806 } 1807 var err error 1808 1809 var data ComplexNamedFragmentsResponse 1810 resp := &graphql.Response{Data: &data} 1811 1812 err = client.MakeRequest( 1813 nil, 1814 req, 1815 resp, 1816 ) 1817 1818 return &data, err 1819 } 1820