// Code generated by github.com/Khan/genqlient, DO NOT EDIT.

package gr

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/Khan/genqlient/graphql"
)

// BookInfo includes the GraphQL fields of Book requested by the fragment BookInfo.
type BookInfo struct {
	Id                     string                                            `json:"id"`
	LegacyId               int64                                             `json:"legacyId"`
	Description            string                                            `json:"description"`
	BookGenres             []BookInfoBookGenresBookGenre                     `json:"bookGenres"`
	BookSeries             []BookInfoBookSeries                              `json:"bookSeries"`
	Details                BookInfoDetailsBookDetails                        `json:"details"`
	ImageUrl               string                                            `json:"imageUrl"`
	PrimaryContributorEdge BookInfoPrimaryContributorEdgeBookContributorEdge `json:"primaryContributorEdge"`
	Stats                  BookInfoStatsBookOrWorkStats                      `json:"stats"`
	Title                  string                                            `json:"title"`
	TitlePrimary           string                                            `json:"titlePrimary"`
	WebUrl                 string                                            `json:"webUrl"`
}

// GetId returns BookInfo.Id, and is useful for accessing the field via an interface.
func (v *BookInfo) GetId() string { return v.Id }

// GetLegacyId returns BookInfo.LegacyId, and is useful for accessing the field via an interface.
func (v *BookInfo) GetLegacyId() int64 { return v.LegacyId }

// GetDescription returns BookInfo.Description, and is useful for accessing the field via an interface.
func (v *BookInfo) GetDescription() string { return v.Description }

// GetBookGenres returns BookInfo.BookGenres, and is useful for accessing the field via an interface.
func (v *BookInfo) GetBookGenres() []BookInfoBookGenresBookGenre { return v.BookGenres }

// GetBookSeries returns BookInfo.BookSeries, and is useful for accessing the field via an interface.
func (v *BookInfo) GetBookSeries() []BookInfoBookSeries { return v.BookSeries }

// GetDetails returns BookInfo.Details, and is useful for accessing the field via an interface.
func (v *BookInfo) GetDetails() BookInfoDetailsBookDetails { return v.Details }

// GetImageUrl returns BookInfo.ImageUrl, and is useful for accessing the field via an interface.
func (v *BookInfo) GetImageUrl() string { return v.ImageUrl }

// GetPrimaryContributorEdge returns BookInfo.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *BookInfo) GetPrimaryContributorEdge() BookInfoPrimaryContributorEdgeBookContributorEdge {
	return v.PrimaryContributorEdge
}

// GetStats returns BookInfo.Stats, and is useful for accessing the field via an interface.
func (v *BookInfo) GetStats() BookInfoStatsBookOrWorkStats { return v.Stats }

// GetTitle returns BookInfo.Title, and is useful for accessing the field via an interface.
func (v *BookInfo) GetTitle() string { return v.Title }

// GetTitlePrimary returns BookInfo.TitlePrimary, and is useful for accessing the field via an interface.
func (v *BookInfo) GetTitlePrimary() string { return v.TitlePrimary }

// GetWebUrl returns BookInfo.WebUrl, and is useful for accessing the field via an interface.
func (v *BookInfo) GetWebUrl() string { return v.WebUrl }

// BookInfoBookGenresBookGenre includes the requested fields of the GraphQL type BookGenre.
type BookInfoBookGenresBookGenre struct {
	Genre BookInfoBookGenresBookGenreGenre `json:"genre"`
}

// GetGenre returns BookInfoBookGenresBookGenre.Genre, and is useful for accessing the field via an interface.
func (v *BookInfoBookGenresBookGenre) GetGenre() BookInfoBookGenresBookGenreGenre { return v.Genre }

// BookInfoBookGenresBookGenreGenre includes the requested fields of the GraphQL type Genre.
type BookInfoBookGenresBookGenreGenre struct {
	Name string `json:"name"`
}

// GetName returns BookInfoBookGenresBookGenreGenre.Name, and is useful for accessing the field via an interface.
func (v *BookInfoBookGenresBookGenreGenre) GetName() string { return v.Name }

// BookInfoBookSeries includes the requested fields of the GraphQL type BookSeries.
type BookInfoBookSeries struct {
	Series          BookInfoBookSeriesSeries `json:"series"`
	SeriesPlacement string                   `json:"seriesPlacement"`
}

// GetSeries returns BookInfoBookSeries.Series, and is useful for accessing the field via an interface.
func (v *BookInfoBookSeries) GetSeries() BookInfoBookSeriesSeries { return v.Series }

// GetSeriesPlacement returns BookInfoBookSeries.SeriesPlacement, and is useful for accessing the field via an interface.
func (v *BookInfoBookSeries) GetSeriesPlacement() string { return v.SeriesPlacement }

// BookInfoBookSeriesSeries includes the requested fields of the GraphQL type Series.
type BookInfoBookSeriesSeries struct {
	Id     string `json:"id"`
	Title  string `json:"title"`
	WebUrl string `json:"webUrl"`
}

// GetId returns BookInfoBookSeriesSeries.Id, and is useful for accessing the field via an interface.
func (v *BookInfoBookSeriesSeries) GetId() string { return v.Id }

// GetTitle returns BookInfoBookSeriesSeries.Title, and is useful for accessing the field via an interface.
func (v *BookInfoBookSeriesSeries) GetTitle() string { return v.Title }

// GetWebUrl returns BookInfoBookSeriesSeries.WebUrl, and is useful for accessing the field via an interface.
func (v *BookInfoBookSeriesSeries) GetWebUrl() string { return v.WebUrl }

// BookInfoDetailsBookDetails includes the requested fields of the GraphQL type BookDetails.
type BookInfoDetailsBookDetails struct {
	Asin            string                             `json:"asin"`
	Isbn13          string                             `json:"isbn13"`
	Format          string                             `json:"format"`
	NumPages        int64                              `json:"numPages"`
	Language        BookInfoDetailsBookDetailsLanguage `json:"language"`
	OfficialUrl     string                             `json:"officialUrl"`
	Publisher       string                             `json:"publisher"`
	PublicationTime float64                            `json:"publicationTime"`
}

// GetAsin returns BookInfoDetailsBookDetails.Asin, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetAsin() string { return v.Asin }

// GetIsbn13 returns BookInfoDetailsBookDetails.Isbn13, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetIsbn13() string { return v.Isbn13 }

// GetFormat returns BookInfoDetailsBookDetails.Format, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetFormat() string { return v.Format }

// GetNumPages returns BookInfoDetailsBookDetails.NumPages, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetNumPages() int64 { return v.NumPages }

// GetLanguage returns BookInfoDetailsBookDetails.Language, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetLanguage() BookInfoDetailsBookDetailsLanguage {
	return v.Language
}

// GetOfficialUrl returns BookInfoDetailsBookDetails.OfficialUrl, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetOfficialUrl() string { return v.OfficialUrl }

// GetPublisher returns BookInfoDetailsBookDetails.Publisher, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetPublisher() string { return v.Publisher }

// GetPublicationTime returns BookInfoDetailsBookDetails.PublicationTime, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetails) GetPublicationTime() float64 { return v.PublicationTime }

// BookInfoDetailsBookDetailsLanguage includes the requested fields of the GraphQL type Language.
type BookInfoDetailsBookDetailsLanguage struct {
	Name string `json:"name"`
}

// GetName returns BookInfoDetailsBookDetailsLanguage.Name, and is useful for accessing the field via an interface.
func (v *BookInfoDetailsBookDetailsLanguage) GetName() string { return v.Name }

// BookInfoPrimaryContributorEdgeBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type BookInfoPrimaryContributorEdgeBookContributorEdge struct {
	Node BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor `json:"node"`
}

// GetNode returns BookInfoPrimaryContributorEdgeBookContributorEdge.Node, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdge) GetNode() BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor {
	return v.Node
}

// BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor includes the requested fields of the GraphQL type Contributor.
type BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor struct {
	Id              string `json:"id"`
	Name            string `json:"name"`
	LegacyId        int64  `json:"legacyId"`
	WebUrl          string `json:"webUrl"`
	ProfileImageUrl string `json:"profileImageUrl"`
	Description     string `json:"description"`
}

// GetId returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.Id, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetId() string {
	return v.Id
}

// GetName returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.Name, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetName() string {
	return v.Name
}

// GetLegacyId returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.LegacyId, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetLegacyId() int64 {
	return v.LegacyId
}

// GetWebUrl returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.WebUrl, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetWebUrl() string {
	return v.WebUrl
}

// GetProfileImageUrl returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.ProfileImageUrl, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetProfileImageUrl() string {
	return v.ProfileImageUrl
}

// GetDescription returns BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor.Description, and is useful for accessing the field via an interface.
func (v *BookInfoPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetDescription() string {
	return v.Description
}

// BookInfoStatsBookOrWorkStats includes the requested fields of the GraphQL type BookOrWorkStats.
type BookInfoStatsBookOrWorkStats struct {
	AverageRating float64 `json:"averageRating"`
	RatingsCount  int64   `json:"ratingsCount"`
	RatingsSum    int64   `json:"ratingsSum"`
}

// GetAverageRating returns BookInfoStatsBookOrWorkStats.AverageRating, and is useful for accessing the field via an interface.
func (v *BookInfoStatsBookOrWorkStats) GetAverageRating() float64 { return v.AverageRating }

// GetRatingsCount returns BookInfoStatsBookOrWorkStats.RatingsCount, and is useful for accessing the field via an interface.
func (v *BookInfoStatsBookOrWorkStats) GetRatingsCount() int64 { return v.RatingsCount }

// GetRatingsSum returns BookInfoStatsBookOrWorkStats.RatingsSum, and is useful for accessing the field via an interface.
func (v *BookInfoStatsBookOrWorkStats) GetRatingsSum() int64 { return v.RatingsSum }

// GetAuthorWorksGetWorksByContributorContributorWorksConnection includes the requested fields of the GraphQL type ContributorWorksConnection.
type GetAuthorWorksGetWorksByContributorContributorWorksConnection struct {
	Edges    []GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge `json:"edges"`
	PageInfo GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo                    `json:"pageInfo"`
}

// GetEdges returns GetAuthorWorksGetWorksByContributorContributorWorksConnection.Edges, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnection) GetEdges() []GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge {
	return v.Edges
}

// GetPageInfo returns GetAuthorWorksGetWorksByContributorContributorWorksConnection.PageInfo, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnection) GetPageInfo() GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo {
	return v.PageInfo
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge includes the requested fields of the GraphQL type ContributorWorksEdge.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge struct {
	Node GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork `json:"node"`
}

// GetNode returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdge) GetNode() GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork {
	return v.Node
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork includes the requested fields of the GraphQL type Work.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork struct {
	Id       string                                                                                                 `json:"id"`
	BestBook GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook `json:"bestBook"`
}

// GetId returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork.Id, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork) GetId() string {
	return v.Id
}

// GetBestBook returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork.BestBook, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWork) GetBestBook() GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook {
	return v.BestBook
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook includes the requested fields of the GraphQL type Book.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook struct {
	LegacyId                  int64                                                                                                                                                `json:"legacyId"`
	PrimaryContributorEdge    GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge      `json:"primaryContributorEdge"`
	SecondaryContributorEdges []GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge `json:"secondaryContributorEdges"`
}

// GetLegacyId returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook.LegacyId, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook) GetLegacyId() int64 {
	return v.LegacyId
}

// GetPrimaryContributorEdge returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook) GetPrimaryContributorEdge() GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge {
	return v.PrimaryContributorEdge
}

// GetSecondaryContributorEdges returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook.SecondaryContributorEdges, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBook) GetSecondaryContributorEdges() []GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge {
	return v.SecondaryContributorEdges
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge struct {
	Role string                                                                                                                                                         `json:"role"`
	Node GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor `json:"node"`
}

// GetRole returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge.Role, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge) GetRole() string {
	return v.Role
}

// GetNode returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge.Node, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdge) GetNode() GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor {
	return v.Node
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor includes the requested fields of the GraphQL type Contributor.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor struct {
	LegacyId int64 `json:"legacyId"`
}

// GetLegacyId returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor.LegacyId, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetLegacyId() int64 {
	return v.LegacyId
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge struct {
	Role string `json:"role"`
}

// GetRole returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge.Role, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionEdgesContributorWorksEdgeNodeWorkBestBookSecondaryContributorEdgesBookContributorEdge) GetRole() string {
	return v.Role
}

// GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo includes the requested fields of the GraphQL type PageInfo.
type GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo struct {
	HasNextPage   bool   `json:"hasNextPage"`
	NextPageToken string `json:"nextPageToken"`
}

// GetHasNextPage returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo.HasNextPage, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo) GetHasNextPage() bool {
	return v.HasNextPage
}

// GetNextPageToken returns GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo.NextPageToken, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksGetWorksByContributorContributorWorksConnectionPageInfo) GetNextPageToken() string {
	return v.NextPageToken
}

// GetAuthorWorksResponse is returned by GetAuthorWorks on success.
type GetAuthorWorksResponse struct {
	GetWorksByContributor GetAuthorWorksGetWorksByContributorContributorWorksConnection `json:"getWorksByContributor"`
}

// GetGetWorksByContributor returns GetAuthorWorksResponse.GetWorksByContributor, and is useful for accessing the field via an interface.
func (v *GetAuthorWorksResponse) GetGetWorksByContributor() GetAuthorWorksGetWorksByContributorContributorWorksConnection {
	return v.GetWorksByContributor
}

// GetBookGetBookByLegacyIdBook includes the requested fields of the GraphQL type Book.
type GetBookGetBookByLegacyIdBook struct {
	BookInfo `json:"-"`
	Work     GetBookGetBookByLegacyIdBookWork `json:"work"`
}

// GetWork returns GetBookGetBookByLegacyIdBook.Work, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetWork() GetBookGetBookByLegacyIdBookWork { return v.Work }

// GetId returns GetBookGetBookByLegacyIdBook.Id, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetId() string { return v.BookInfo.Id }

// GetLegacyId returns GetBookGetBookByLegacyIdBook.LegacyId, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetLegacyId() int64 { return v.BookInfo.LegacyId }

// GetDescription returns GetBookGetBookByLegacyIdBook.Description, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetDescription() string { return v.BookInfo.Description }

// GetBookGenres returns GetBookGetBookByLegacyIdBook.BookGenres, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetBookGenres() []BookInfoBookGenresBookGenre {
	return v.BookInfo.BookGenres
}

// GetBookSeries returns GetBookGetBookByLegacyIdBook.BookSeries, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetBookSeries() []BookInfoBookSeries {
	return v.BookInfo.BookSeries
}

// GetDetails returns GetBookGetBookByLegacyIdBook.Details, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetDetails() BookInfoDetailsBookDetails {
	return v.BookInfo.Details
}

// GetImageUrl returns GetBookGetBookByLegacyIdBook.ImageUrl, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetImageUrl() string { return v.BookInfo.ImageUrl }

// GetPrimaryContributorEdge returns GetBookGetBookByLegacyIdBook.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetPrimaryContributorEdge() BookInfoPrimaryContributorEdgeBookContributorEdge {
	return v.BookInfo.PrimaryContributorEdge
}

// GetStats returns GetBookGetBookByLegacyIdBook.Stats, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetStats() BookInfoStatsBookOrWorkStats {
	return v.BookInfo.Stats
}

// GetTitle returns GetBookGetBookByLegacyIdBook.Title, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetTitle() string { return v.BookInfo.Title }

// GetTitlePrimary returns GetBookGetBookByLegacyIdBook.TitlePrimary, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetTitlePrimary() string { return v.BookInfo.TitlePrimary }

// GetWebUrl returns GetBookGetBookByLegacyIdBook.WebUrl, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBook) GetWebUrl() string { return v.BookInfo.WebUrl }

func (v *GetBookGetBookByLegacyIdBook) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetBookGetBookByLegacyIdBook
		graphql.NoUnmarshalJSON
	}
	firstPass.GetBookGetBookByLegacyIdBook = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	err = json.Unmarshal(
		b, &v.BookInfo)
	if err != nil {
		return err
	}
	return nil
}

type __premarshalGetBookGetBookByLegacyIdBook struct {
	Work GetBookGetBookByLegacyIdBookWork `json:"work"`

	Id string `json:"id"`

	LegacyId int64 `json:"legacyId"`

	Description string `json:"description"`

	BookGenres []BookInfoBookGenresBookGenre `json:"bookGenres"`

	BookSeries []BookInfoBookSeries `json:"bookSeries"`

	Details BookInfoDetailsBookDetails `json:"details"`

	ImageUrl string `json:"imageUrl"`

	PrimaryContributorEdge BookInfoPrimaryContributorEdgeBookContributorEdge `json:"primaryContributorEdge"`

	Stats BookInfoStatsBookOrWorkStats `json:"stats"`

	Title string `json:"title"`

	TitlePrimary string `json:"titlePrimary"`

	WebUrl string `json:"webUrl"`
}

func (v *GetBookGetBookByLegacyIdBook) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetBookGetBookByLegacyIdBook) __premarshalJSON() (*__premarshalGetBookGetBookByLegacyIdBook, error) {
	var retval __premarshalGetBookGetBookByLegacyIdBook

	retval.Work = v.Work
	retval.Id = v.BookInfo.Id
	retval.LegacyId = v.BookInfo.LegacyId
	retval.Description = v.BookInfo.Description
	retval.BookGenres = v.BookInfo.BookGenres
	retval.BookSeries = v.BookInfo.BookSeries
	retval.Details = v.BookInfo.Details
	retval.ImageUrl = v.BookInfo.ImageUrl
	retval.PrimaryContributorEdge = v.BookInfo.PrimaryContributorEdge
	retval.Stats = v.BookInfo.Stats
	retval.Title = v.BookInfo.Title
	retval.TitlePrimary = v.BookInfo.TitlePrimary
	retval.WebUrl = v.BookInfo.WebUrl
	return &retval, nil
}

// GetBookGetBookByLegacyIdBookWork includes the requested fields of the GraphQL type Work.
type GetBookGetBookByLegacyIdBookWork struct {
	Id       string                                                  `json:"id"`
	LegacyId int64                                                   `json:"legacyId"`
	Details  GetBookGetBookByLegacyIdBookWorkDetails                 `json:"details"`
	BestBook GetBookGetBookByLegacyIdBookWorkBestBook                `json:"bestBook"`
	Editions GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection `json:"editions"`
}

// GetId returns GetBookGetBookByLegacyIdBookWork.Id, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWork) GetId() string { return v.Id }

// GetLegacyId returns GetBookGetBookByLegacyIdBookWork.LegacyId, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWork) GetLegacyId() int64 { return v.LegacyId }

// GetDetails returns GetBookGetBookByLegacyIdBookWork.Details, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWork) GetDetails() GetBookGetBookByLegacyIdBookWorkDetails {
	return v.Details
}

// GetBestBook returns GetBookGetBookByLegacyIdBookWork.BestBook, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWork) GetBestBook() GetBookGetBookByLegacyIdBookWorkBestBook {
	return v.BestBook
}

// GetEditions returns GetBookGetBookByLegacyIdBookWork.Editions, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWork) GetEditions() GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection {
	return v.Editions
}

// GetBookGetBookByLegacyIdBookWorkBestBook includes the requested fields of the GraphQL type Book.
type GetBookGetBookByLegacyIdBookWorkBestBook struct {
	LegacyId               int64                                                                             `json:"legacyId"`
	Title                  string                                                                            `json:"title"`
	TitlePrimary           string                                                                            `json:"titlePrimary"`
	PrimaryContributorEdge GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge `json:"primaryContributorEdge"`
}

// GetLegacyId returns GetBookGetBookByLegacyIdBookWorkBestBook.LegacyId, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBook) GetLegacyId() int64 { return v.LegacyId }

// GetTitle returns GetBookGetBookByLegacyIdBookWorkBestBook.Title, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBook) GetTitle() string { return v.Title }

// GetTitlePrimary returns GetBookGetBookByLegacyIdBookWorkBestBook.TitlePrimary, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBook) GetTitlePrimary() string { return v.TitlePrimary }

// GetPrimaryContributorEdge returns GetBookGetBookByLegacyIdBookWorkBestBook.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBook) GetPrimaryContributorEdge() GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge {
	return v.PrimaryContributorEdge
}

// GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge struct {
	Role string                                                                                           `json:"role"`
	Node GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor `json:"node"`
}

// GetRole returns GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge.Role, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge) GetRole() string {
	return v.Role
}

// GetNode returns GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge.Node, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdge) GetNode() GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor {
	return v.Node
}

// GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor includes the requested fields of the GraphQL type Contributor.
type GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor struct {
	LegacyId int64 `json:"legacyId"`
}

// GetLegacyId returns GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor.LegacyId, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetLegacyId() int64 {
	return v.LegacyId
}

// GetBookGetBookByLegacyIdBookWorkDetails includes the requested fields of the GraphQL type WorkDetails.
type GetBookGetBookByLegacyIdBookWorkDetails struct {
	WebUrl          string  `json:"webUrl"`
	PublicationTime float64 `json:"publicationTime"`
}

// GetWebUrl returns GetBookGetBookByLegacyIdBookWorkDetails.WebUrl, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkDetails) GetWebUrl() string { return v.WebUrl }

// GetPublicationTime returns GetBookGetBookByLegacyIdBookWorkDetails.PublicationTime, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkDetails) GetPublicationTime() float64 {
	return v.PublicationTime
}

// GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection includes the requested fields of the GraphQL type BooksConnection.
type GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection struct {
	Edges []GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge `json:"edges"`
}

// GetEdges returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection.Edges, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnection) GetEdges() []GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge {
	return v.Edges
}

// GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge includes the requested fields of the GraphQL type BooksEdge.
type GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge struct {
	Node GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook `json:"node"`
}

// GetNode returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdge) GetNode() GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook {
	return v.Node
}

// GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook includes the requested fields of the GraphQL type Book.
type GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook struct {
	BookInfo `json:"-"`
}

// GetId returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.Id, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetId() string {
	return v.BookInfo.Id
}

// GetLegacyId returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.LegacyId, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetLegacyId() int64 {
	return v.BookInfo.LegacyId
}

// GetDescription returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.Description, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetDescription() string {
	return v.BookInfo.Description
}

// GetBookGenres returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.BookGenres, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetBookGenres() []BookInfoBookGenresBookGenre {
	return v.BookInfo.BookGenres
}

// GetBookSeries returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.BookSeries, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetBookSeries() []BookInfoBookSeries {
	return v.BookInfo.BookSeries
}

// GetDetails returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.Details, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetDetails() BookInfoDetailsBookDetails {
	return v.BookInfo.Details
}

// GetImageUrl returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.ImageUrl, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetImageUrl() string {
	return v.BookInfo.ImageUrl
}

// GetPrimaryContributorEdge returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetPrimaryContributorEdge() BookInfoPrimaryContributorEdgeBookContributorEdge {
	return v.BookInfo.PrimaryContributorEdge
}

// GetStats returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.Stats, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetStats() BookInfoStatsBookOrWorkStats {
	return v.BookInfo.Stats
}

// GetTitle returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.Title, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetTitle() string {
	return v.BookInfo.Title
}

// GetTitlePrimary returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.TitlePrimary, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetTitlePrimary() string {
	return v.BookInfo.TitlePrimary
}

// GetWebUrl returns GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook.WebUrl, and is useful for accessing the field via an interface.
func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetWebUrl() string {
	return v.BookInfo.WebUrl
}

func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook
		graphql.NoUnmarshalJSON
	}
	firstPass.GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	err = json.Unmarshal(
		b, &v.BookInfo)
	if err != nil {
		return err
	}
	return nil
}

type __premarshalGetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook struct {
	Id string `json:"id"`

	LegacyId int64 `json:"legacyId"`

	Description string `json:"description"`

	BookGenres []BookInfoBookGenresBookGenre `json:"bookGenres"`

	BookSeries []BookInfoBookSeries `json:"bookSeries"`

	Details BookInfoDetailsBookDetails `json:"details"`

	ImageUrl string `json:"imageUrl"`

	PrimaryContributorEdge BookInfoPrimaryContributorEdgeBookContributorEdge `json:"primaryContributorEdge"`

	Stats BookInfoStatsBookOrWorkStats `json:"stats"`

	Title string `json:"title"`

	TitlePrimary string `json:"titlePrimary"`

	WebUrl string `json:"webUrl"`
}

func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook) __premarshalJSON() (*__premarshalGetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook, error) {
	var retval __premarshalGetBookGetBookByLegacyIdBookWorkEditionsBooksConnectionEdgesBooksEdgeNodeBook

	retval.Id = v.BookInfo.Id
	retval.LegacyId = v.BookInfo.LegacyId
	retval.Description = v.BookInfo.Description
	retval.BookGenres = v.BookInfo.BookGenres
	retval.BookSeries = v.BookInfo.BookSeries
	retval.Details = v.BookInfo.Details
	retval.ImageUrl = v.BookInfo.ImageUrl
	retval.PrimaryContributorEdge = v.BookInfo.PrimaryContributorEdge
	retval.Stats = v.BookInfo.Stats
	retval.Title = v.BookInfo.Title
	retval.TitlePrimary = v.BookInfo.TitlePrimary
	retval.WebUrl = v.BookInfo.WebUrl
	return &retval, nil
}

// GetBookResponse is returned by GetBook on success.
type GetBookResponse struct {
	GetBookByLegacyId GetBookGetBookByLegacyIdBook `json:"getBookByLegacyId"`
}

// GetGetBookByLegacyId returns GetBookResponse.GetBookByLegacyId, and is useful for accessing the field via an interface.
func (v *GetBookResponse) GetGetBookByLegacyId() GetBookGetBookByLegacyIdBook {
	return v.GetBookByLegacyId
}

// GetEditionsGetEditionsBooksConnection includes the requested fields of the GraphQL type BooksConnection.
type GetEditionsGetEditionsBooksConnection struct {
	Edges    []GetEditionsGetEditionsBooksConnectionEdgesBooksEdge `json:"edges"`
	PageInfo GetEditionsGetEditionsBooksConnectionPageInfo         `json:"pageInfo"`
}

// GetEdges returns GetEditionsGetEditionsBooksConnection.Edges, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnection) GetEdges() []GetEditionsGetEditionsBooksConnectionEdgesBooksEdge {
	return v.Edges
}

// GetPageInfo returns GetEditionsGetEditionsBooksConnection.PageInfo, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnection) GetPageInfo() GetEditionsGetEditionsBooksConnectionPageInfo {
	return v.PageInfo
}

// GetEditionsGetEditionsBooksConnectionEdgesBooksEdge includes the requested fields of the GraphQL type BooksEdge.
type GetEditionsGetEditionsBooksConnectionEdgesBooksEdge struct {
	Node GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook `json:"node"`
}

// GetNode returns GetEditionsGetEditionsBooksConnectionEdgesBooksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnectionEdgesBooksEdge) GetNode() GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook {
	return v.Node
}

// GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook includes the requested fields of the GraphQL type Book.
type GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook struct {
	Id       string `json:"id"`
	LegacyId int64  `json:"legacyId"`
}

// GetId returns GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook.Id, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetId() string { return v.Id }

// GetLegacyId returns GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook.LegacyId, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnectionEdgesBooksEdgeNodeBook) GetLegacyId() int64 {
	return v.LegacyId
}

// GetEditionsGetEditionsBooksConnectionPageInfo includes the requested fields of the GraphQL type PageInfo.
type GetEditionsGetEditionsBooksConnectionPageInfo struct {
	HasNextPage   bool   `json:"hasNextPage"`
	NextPageToken string `json:"nextPageToken"`
}

// GetHasNextPage returns GetEditionsGetEditionsBooksConnectionPageInfo.HasNextPage, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnectionPageInfo) GetHasNextPage() bool { return v.HasNextPage }

// GetNextPageToken returns GetEditionsGetEditionsBooksConnectionPageInfo.NextPageToken, and is useful for accessing the field via an interface.
func (v *GetEditionsGetEditionsBooksConnectionPageInfo) GetNextPageToken() string {
	return v.NextPageToken
}

// GetEditionsResponse is returned by GetEditions on success.
type GetEditionsResponse struct {
	GetEditions GetEditionsGetEditionsBooksConnection `json:"getEditions"`
}

// GetGetEditions returns GetEditionsResponse.GetEditions, and is useful for accessing the field via an interface.
func (v *GetEditionsResponse) GetGetEditions() GetEditionsGetEditionsBooksConnection {
	return v.GetEditions
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection includes the requested fields of the GraphQL type HomeWidgetItemsConnection.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection struct {
	Edges []GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge `json:"edges"`
}

// GetEdges returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection.Edges, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection) GetEdges() []GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge {
	return v.Edges
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge includes the requested fields of the GraphQL type HomeWidgetEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge struct {
	Node GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget `json:"node"`
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget {
	return v.Node
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget includes the requested fields of the GraphQL type HomeWidget.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget struct {
	Recommendations []GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge `json:"-"`
}

// GetRecommendations returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget.Recommendations, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget) GetRecommendations() []GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge {
	return v.Recommendations
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget
		Recommendations []json.RawMessage `json:"recommendations"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Recommendations
		src := firstPass.Recommendations
		*dst = make(
			[]GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge,
			len(src))
		for i, src := range src {
			dst := &(*dst)[i]
			if len(src) != 0 && string(src) != "null" {
				err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge(
					src, dst)
				if err != nil {
					return fmt.Errorf(
						"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget.Recommendations: %w", err)
				}
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget struct {
	Recommendations []json.RawMessage `json:"recommendations"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget

	{

		dst := &retval.Recommendations
		src := v.Recommendations
		*dst = make(
			[]json.RawMessage,
			len(src))
		for i, src := range src {
			dst := &(*dst)[i]
			var err error
			*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge(
				&src)
			if err != nil {
				return nil, fmt.Errorf(
					"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidget.Recommendations: %w", err)
			}
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge includes the requested fields of the GraphQL type ArticleBlogEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge includes the requested fields of the GraphQL type ArticleInterviewEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge includes the requested fields of the GraphQL type BlockedUsersEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge includes the requested fields of the GraphQL type BookListBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge includes the requested fields of the GraphQL type BookListEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge includes the requested fields of the GraphQL type BookReviewsEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge includes the requested fields of the GraphQL type BooksEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge includes the requested fields of the GraphQL type ContributorFollowersEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge includes the requested fields of the GraphQL type ContributorWorksEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge includes the requested fields of the GraphQL interface Edge.
//
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge is implemented by the following types:
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge interface {
	implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge()
	// GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values).
	GetTypename() string
	// GetNode returns the interface-field "node" from its implementation.
	GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge() {
}

func __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge(b []byte, v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge) error {
	if string(b) == "null" {
		return nil
	}

	var tn struct {
		TypeName string `json:"__typename"`
	}
	err := json.Unmarshal(b, &tn)
	if err != nil {
		return err
	}

	switch tn.TypeName {
	case "ArticleBlogEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge)
		return json.Unmarshal(b, *v)
	case "ArticleInterviewEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge)
		return json.Unmarshal(b, *v)
	case "BlockedUsersEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge)
		return json.Unmarshal(b, *v)
	case "BookContributorEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge)
		return json.Unmarshal(b, *v)
	case "BookListBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge)
		return json.Unmarshal(b, *v)
	case "BookListEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge)
		return json.Unmarshal(b, *v)
	case "BookReviewsEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge)
		return json.Unmarshal(b, *v)
	case "BooksEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge)
		return json.Unmarshal(b, *v)
	case "ContributorFollowersEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge)
		return json.Unmarshal(b, *v)
	case "ContributorWorksEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge)
		return json.Unmarshal(b, *v)
	case "FeaturedKNHCollectionEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge)
		return json.Unmarshal(b, *v)
	case "GiveawaysEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetBlogEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetInterviewEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetReviewEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge)
		return json.Unmarshal(b, *v)
	case "HomeWidgetWorkEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge)
		return json.Unmarshal(b, *v)
	case "NotificationUserEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge)
		return json.Unmarshal(b, *v)
	case "NotificationsEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge)
		return json.Unmarshal(b, *v)
	case "ResourceCommentsEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge)
		return json.Unmarshal(b, *v)
	case "ResourceQuestionsEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge)
		return json.Unmarshal(b, *v)
	case "ResourceQuotesEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge)
		return json.Unmarshal(b, *v)
	case "ResourceTopicsEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge)
		return json.Unmarshal(b, *v)
	case "ReviewEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge)
		return json.Unmarshal(b, *v)
	case "SearchBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge)
		return json.Unmarshal(b, *v)
	case "SeriesWorksEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge)
		return json.Unmarshal(b, *v)
	case "ShelvingEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge)
		return json.Unmarshal(b, *v)
	case "SimilarBooksEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge)
		return json.Unmarshal(b, *v)
	case "SocialSignalUserEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge)
		return json.Unmarshal(b, *v)
	case "TaggedBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge)
		return json.Unmarshal(b, *v)
	case "TopListBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge)
		return json.Unmarshal(b, *v)
	case "TopListUserEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge)
		return json.Unmarshal(b, *v)
	case "TopListWorkEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge)
		return json.Unmarshal(b, *v)
	case "UserCurrentlyReadingBookEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge)
		return json.Unmarshal(b, *v)
	case "UserGenreEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge)
		return json.Unmarshal(b, *v)
	case "UserListBookVoteEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge)
		return json.Unmarshal(b, *v)
	case "UserListVoteEdge":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge)
		return json.Unmarshal(b, *v)
	case "":
		return fmt.Errorf(
			"response was missing Edge.__typename")
	default:
		return fmt.Errorf(
			`unexpected concrete type for GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge: "%v"`, tn.TypeName)
	}
}

func __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge(v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge) ([]byte, error) {

	var typename string
	switch v := (*v).(type) {
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge:
		typename = "ArticleBlogEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleBlogEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge:
		typename = "ArticleInterviewEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsArticleInterviewEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge:
		typename = "BlockedUsersEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBlockedUsersEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge:
		typename = "BookContributorEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookContributorEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge:
		typename = "BookListBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge:
		typename = "BookListEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookListEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge:
		typename = "BookReviewsEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBookReviewsEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge:
		typename = "BooksEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsBooksEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge:
		typename = "ContributorFollowersEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorFollowersEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge:
		typename = "ContributorWorksEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsContributorWorksEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge:
		typename = "FeaturedKNHCollectionEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge:
		typename = "GiveawaysEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge:
		typename = "HomeWidgetBlogEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge:
		typename = "HomeWidgetBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge:
		typename = "HomeWidgetEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge:
		typename = "HomeWidgetInterviewEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge:
		typename = "HomeWidgetReviewEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge:
		typename = "HomeWidgetWorkEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge:
		typename = "NotificationUserEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge:
		typename = "NotificationsEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge:
		typename = "ResourceCommentsEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge:
		typename = "ResourceQuestionsEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge:
		typename = "ResourceQuotesEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge:
		typename = "ResourceTopicsEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge:
		typename = "ReviewEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge:
		typename = "SearchBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge:
		typename = "SeriesWorksEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge:
		typename = "ShelvingEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge:
		typename = "SimilarBooksEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge:
		typename = "SocialSignalUserEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge:
		typename = "TaggedBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge:
		typename = "TopListBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge:
		typename = "TopListUserEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge:
		typename = "TopListWorkEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge:
		typename = "UserCurrentlyReadingBookEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge:
		typename = "UserGenreEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge:
		typename = "UserListBookVoteEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge:
		typename = "UserListVoteEdge"

		premarshaled, err := v.__premarshalJSON()
		if err != nil {
			return nil, err
		}
		result := struct {
			TypeName string `json:"__typename"`
			*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge
		}{typename, premarshaled}
		return json.Marshal(result)
	case nil:
		return []byte("null"), nil
	default:
		return nil, fmt.Errorf(
			`unexpected concrete type for GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdge: "%T"`, v)
	}
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode includes the requested fields of the GraphQL interface Node.
//
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode is implemented by the following types:
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote
// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode interface {
	implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode()
	// GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values).
	GetTypename() string
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork) implementsGraphQLInterfaceGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode() {
}

func __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(b []byte, v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode) error {
	if string(b) == "null" {
		return nil
	}

	var tn struct {
		TypeName string `json:"__typename"`
	}
	err := json.Unmarshal(b, &tn)
	if err != nil {
		return err
	}

	switch tn.TypeName {
	case "Blog":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog)
		return json.Unmarshal(b, *v)
	case "Book":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook)
		return json.Unmarshal(b, *v)
	case "BookList":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList)
		return json.Unmarshal(b, *v)
	case "Comment":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment)
		return json.Unmarshal(b, *v)
	case "Contributor":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor)
		return json.Unmarshal(b, *v)
	case "Genre":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre)
		return json.Unmarshal(b, *v)
	case "Giveaway":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway)
		return json.Unmarshal(b, *v)
	case "HomeWidget":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget)
		return json.Unmarshal(b, *v)
	case "HomeWidgetBook":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook)
		return json.Unmarshal(b, *v)
	case "Interview":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview)
		return json.Unmarshal(b, *v)
	case "KNHCollection":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection)
		return json.Unmarshal(b, *v)
	case "Notification":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification)
		return json.Unmarshal(b, *v)
	case "Question":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion)
		return json.Unmarshal(b, *v)
	case "Quote":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote)
		return json.Unmarshal(b, *v)
	case "Review":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview)
		return json.Unmarshal(b, *v)
	case "Series":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries)
		return json.Unmarshal(b, *v)
	case "Shelving":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving)
		return json.Unmarshal(b, *v)
	case "Topic":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic)
		return json.Unmarshal(b, *v)
	case "User":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser)
		return json.Unmarshal(b, *v)
	case "UserListBookVote":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote)
		return json.Unmarshal(b, *v)
	case "UserListVote":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote)
		return json.Unmarshal(b, *v)
	case "Work":
		*v = new(GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork)
		return json.Unmarshal(b, *v)
	case "":
		return fmt.Errorf(
			"response was missing Node.__typename")
	default:
		return fmt.Errorf(
			`unexpected concrete type for GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode: "%v"`, tn.TypeName)
	}
}

func __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode) ([]byte, error) {

	var typename string
	switch v := (*v).(type) {
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog:
		typename = "Blog"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook:
		typename = "Book"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList:
		typename = "BookList"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment:
		typename = "Comment"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor:
		typename = "Contributor"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre:
		typename = "Genre"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway:
		typename = "Giveaway"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget:
		typename = "HomeWidget"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook:
		typename = "HomeWidgetBook"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview:
		typename = "Interview"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection:
		typename = "KNHCollection"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification:
		typename = "Notification"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion:
		typename = "Question"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote:
		typename = "Quote"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview:
		typename = "Review"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries:
		typename = "Series"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving:
		typename = "Shelving"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic:
		typename = "Topic"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser:
		typename = "User"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote:
		typename = "UserListBookVote"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote:
		typename = "UserListVote"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote
		}{typename, v}
		return json.Marshal(result)
	case *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork:
		typename = "Work"

		result := struct {
			TypeName string `json:"__typename"`
			*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork
		}{typename, v}
		return json.Marshal(result)
	case nil:
		return []byte("null"), nil
	default:
		return nil, fmt.Errorf(
			`unexpected concrete type for GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode: "%T"`, v)
	}
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog includes the requested fields of the GraphQL type Blog.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBlog) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook includes the requested fields of the GraphQL type Book.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBook) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList includes the requested fields of the GraphQL type BookList.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeBookList) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment includes the requested fields of the GraphQL type Comment.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeComment) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor includes the requested fields of the GraphQL type Contributor.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeContributor) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre includes the requested fields of the GraphQL type Genre.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGenre) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway includes the requested fields of the GraphQL type Giveaway.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeGiveaway) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget includes the requested fields of the GraphQL type HomeWidget.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidget) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook includes the requested fields of the GraphQL type HomeWidgetBook.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeHomeWidgetBook) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview includes the requested fields of the GraphQL type Interview.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeInterview) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection includes the requested fields of the GraphQL type KNHCollection.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeKNHCollection) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification includes the requested fields of the GraphQL type Notification.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeNotification) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion includes the requested fields of the GraphQL type Question.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuestion) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote includes the requested fields of the GraphQL type Quote.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeQuote) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview includes the requested fields of the GraphQL type Review.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeReview) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries includes the requested fields of the GraphQL type Series.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeSeries) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving includes the requested fields of the GraphQL type Shelving.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeShelving) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic includes the requested fields of the GraphQL type Topic.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeTopic) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser includes the requested fields of the GraphQL type User.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUser) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote includes the requested fields of the GraphQL type UserListBookVote.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListBookVote) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote includes the requested fields of the GraphQL type UserListVote.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote struct {
	Typename string `json:"__typename"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeUserListVote) GetTypename() string {
	return v.Typename
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork includes the requested fields of the GraphQL type Work.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork struct {
	Typename string                                                                                                                   `json:"__typename"`
	Details  GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails `json:"details"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork) GetTypename() string {
	return v.Typename
}

// GetDetails returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork.Details, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWork) GetDetails() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails {
	return v.Details
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails includes the requested fields of the GraphQL type WorkDetails.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails struct {
	WebUrl string `json:"webUrl"`
}

// GetWebUrl returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails.WebUrl, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNodeWorkDetails) GetWebUrl() string {
	return v.WebUrl
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge includes the requested fields of the GraphQL type FeaturedKNHCollectionEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsFeaturedKNHCollectionEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge includes the requested fields of the GraphQL type GiveawaysEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsGiveawaysEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge includes the requested fields of the GraphQL type HomeWidgetBlogEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBlogEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge includes the requested fields of the GraphQL type HomeWidgetBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge includes the requested fields of the GraphQL type HomeWidgetEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge includes the requested fields of the GraphQL type HomeWidgetInterviewEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetInterviewEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge includes the requested fields of the GraphQL type HomeWidgetReviewEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetReviewEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge includes the requested fields of the GraphQL type HomeWidgetWorkEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsHomeWidgetWorkEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge includes the requested fields of the GraphQL type NotificationUserEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationUserEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge includes the requested fields of the GraphQL type NotificationsEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsNotificationsEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge includes the requested fields of the GraphQL type ResourceCommentsEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceCommentsEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge includes the requested fields of the GraphQL type ResourceQuestionsEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuestionsEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge includes the requested fields of the GraphQL type ResourceQuotesEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceQuotesEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge includes the requested fields of the GraphQL type ResourceTopicsEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsResourceTopicsEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge includes the requested fields of the GraphQL type ReviewEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsReviewEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge includes the requested fields of the GraphQL type SearchBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSearchBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge includes the requested fields of the GraphQL type SeriesWorksEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSeriesWorksEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge includes the requested fields of the GraphQL type ShelvingEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsShelvingEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge includes the requested fields of the GraphQL type SimilarBooksEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSimilarBooksEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge includes the requested fields of the GraphQL type SocialSignalUserEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsSocialSignalUserEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge includes the requested fields of the GraphQL type TaggedBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTaggedBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge includes the requested fields of the GraphQL type TopListBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge includes the requested fields of the GraphQL type TopListUserEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListUserEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge includes the requested fields of the GraphQL type TopListWorkEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsTopListWorkEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge includes the requested fields of the GraphQL type UserCurrentlyReadingBookEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserCurrentlyReadingBookEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge includes the requested fields of the GraphQL type UserGenreEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserGenreEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge includes the requested fields of the GraphQL type UserListBookVoteEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListBookVoteEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge includes the requested fields of the GraphQL type UserListVoteEdge.
type GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge struct {
	Typename string                                                                                                        `json:"__typename"`
	Node     GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode `json:"-"`
}

// GetTypename returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge.Typename, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge.Node, and is useful for accessing the field via an interface.
func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) GetNode() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode {
	return v.Node
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge
		Node json.RawMessage `json:"node"`
		graphql.NoUnmarshalJSON
	}
	firstPass.GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Node
		src := firstPass.Node
		if len(src) != 0 && string(src) != "null" {
			err = __unmarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
				src, dst)
			if err != nil {
				return fmt.Errorf(
					"unable to unmarshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge.Node: %w", err)
			}
		}
	}
	return nil
}

type __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge struct {
	Typename string `json:"__typename"`

	Node json.RawMessage `json:"node"`
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge) __premarshalJSON() (*__premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge, error) {
	var retval __premarshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge

	retval.Typename = v.Typename
	{

		dst := &retval.Node
		src := v.Node
		var err error
		*dst, err = __marshalGetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsEdgeNode(
			&src)
		if err != nil {
			return nil, fmt.Errorf(
				"unable to marshal GetRecommendedGetHomeWidgetsHomeWidgetItemsConnectionEdgesHomeWidgetEdgeNodeHomeWidgetRecommendationsUserListVoteEdge.Node: %w", err)
		}
	}
	return &retval, nil
}

// GetRecommendedResponse is returned by GetRecommended on success.
type GetRecommendedResponse struct {
	GetHomeWidgets GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection `json:"getHomeWidgets"`
}

// GetGetHomeWidgets returns GetRecommendedResponse.GetHomeWidgets, and is useful for accessing the field via an interface.
func (v *GetRecommendedResponse) GetGetHomeWidgets() GetRecommendedGetHomeWidgetsHomeWidgetItemsConnection {
	return v.GetHomeWidgets
}

type GetWorksByContributorInput struct {
	Id string `json:"id"`
}

// GetId returns GetWorksByContributorInput.Id, and is useful for accessing the field via an interface.
func (v *GetWorksByContributorInput) GetId() string { return v.Id }

type PaginationInput struct {
	After  string `json:"after"`
	Before string `json:"before"`
	Limit  int64  `json:"limit"`
}

// GetAfter returns PaginationInput.After, and is useful for accessing the field via an interface.
func (v *PaginationInput) GetAfter() string { return v.After }

// GetBefore returns PaginationInput.Before, and is useful for accessing the field via an interface.
func (v *PaginationInput) GetBefore() string { return v.Before }

// GetLimit returns PaginationInput.Limit, and is useful for accessing the field via an interface.
func (v *PaginationInput) GetLimit() int64 { return v.Limit }

// SearchGetSearchSuggestionsSearchResultsConnection includes the requested fields of the GraphQL type SearchResultsConnection.
type SearchGetSearchSuggestionsSearchResultsConnection struct {
	TotalCount int64                                                                    `json:"totalCount"`
	Edges      []SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge `json:"-"`
}

// GetTotalCount returns SearchGetSearchSuggestionsSearchResultsConnection.TotalCount, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnection) GetTotalCount() int64 {
	return v.TotalCount
}

// GetEdges returns SearchGetSearchSuggestionsSearchResultsConnection.Edges, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnection) GetEdges() []SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge {
	return v.Edges
}

func (v *SearchGetSearchSuggestionsSearchResultsConnection) UnmarshalJSON(b []byte) error {

	if string(b) == "null" {
		return nil
	}

	var firstPass struct {
		*SearchGetSearchSuggestionsSearchResultsConnection
		Edges []json.RawMessage `json:"edges"`
		graphql.NoUnmarshalJSON
	}
	firstPass.SearchGetSearchSuggestionsSearchResultsConnection = v

	err := json.Unmarshal(b, &firstPass)
	if err != nil {
		return err
	}

	{
		dst := &v.Edges
		src := firstPass.Edges
		*dst = make(
			[]SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge,
			len(src))
		for i, src := range src {
			dst := &(*dst)[i]
			if len(src) != 0 && string(src) != "null" {
				err = __unmarshalSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge(
					src, dst)
				if err != nil {
					return fmt.Errorf(
						"unable to unmarshal SearchGetSearchSuggestionsSearchResultsConnection.Edges: %w", err)
				}
			}
		}
	}
	return nil
}

type __premarshalSearchGetSearchSuggestionsSearchResultsConnection struct {
	TotalCount int64 `json:"totalCount"`

	Edges []json.RawMessage `json:"edges"`
}

func (v *SearchGetSearchSuggestionsSearchResultsConnection) MarshalJSON() ([]byte, error) {
	premarshaled, err := v.__premarshalJSON()
	if err != nil {
		return nil, err
	}
	return json.Marshal(premarshaled)
}

func (v *SearchGetSearchSuggestionsSearchResultsConnection) __premarshalJSON() (*__premarshalSearchGetSearchSuggestionsSearchResultsConnection, error) {
	var retval __premarshalSearchGetSearchSuggestionsSearchResultsConnection

	retval.TotalCount = v.TotalCount
	{

		dst := &retval.Edges
		src := v.Edges
		*dst = make(
			[]json.RawMessage,
			len(src))
		for i, src := range src {
			dst := &(*dst)[i]
			var err error
			*dst, err = __marshalSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge(
				&src)
			if err != nil {
				return nil, fmt.Errorf(
					"unable to marshal SearchGetSearchSuggestionsSearchResultsConnection.Edges: %w", err)
			}
		}
	}
	return &retval, nil
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge includes the requested fields of the GraphQL type SearchBookEdge.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge struct {
	Typename string                                                                       `json:"__typename"`
	Node     SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook `json:"node"`
}

// GetTypename returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge.Typename, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge) GetTypename() string {
	return v.Typename
}

// GetNode returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge.Node, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge) GetNode() SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook {
	return v.Node
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook includes the requested fields of the GraphQL type Book.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook struct {
	Work     SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork `json:"work"`
	Title    string                                                                           `json:"title"`
	LegacyId int64                                                                            `json:"legacyId"`
}

// GetWork returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook.Work, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook) GetWork() SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork {
	return v.Work
}

// GetTitle returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook.Title, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook) GetTitle() string {
	return v.Title
}

// GetLegacyId returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook.LegacyId, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBook) GetLegacyId() int64 {
	return v.LegacyId
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork includes the requested fields of the GraphQL type Work.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork struct {
	LegacyId int64                                                                                    `json:"legacyId"`
	BestBook SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook `json:"bestBook"`
}

// GetLegacyId returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork.LegacyId, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork) GetLegacyId() int64 {
	return v.LegacyId
}

// GetBestBook returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork.BestBook, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWork) GetBestBook() SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook {
	return v.BestBook
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook includes the requested fields of the GraphQL type Book.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook struct {
	PrimaryContributorEdge SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge `json:"primaryContributorEdge"`
}

// GetPrimaryContributorEdge returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook.PrimaryContributorEdge, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBook) GetPrimaryContributorEdge() SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge {
	return v.PrimaryContributorEdge
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge includes the requested fields of the GraphQL type BookContributorEdge.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge struct {
	Node SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor `json:"node"`
}

// GetNode returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge.Node, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdge) GetNode() SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor {
	return v.Node
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor includes the requested fields of the GraphQL type Contributor.
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor struct {
	Name     string `json:"name"`
	LegacyId int64  `json:"legacyId"`
}

// GetName returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor.Name, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetName() string {
	return v.Name
}

// GetLegacyId returns SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor.LegacyId, and is useful for accessing the field via an interface.
func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdgeNodeBookWorkBestBookPrimaryContributorEdgeBookContributorEdgeNodeContributor) GetLegacyId() int64 {
	return v.LegacyId
}

// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge includes the requested fields of the GraphQL interface SearchResultEdge.
//
// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge is implemented by the following types:
// SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge
type SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge interface {
	implementsGraphQLInterfaceSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge()
	// GetTypename returns the receiver's concrete GraphQL type-name (see interface doc for possible values).
	GetTypename() string
}

func (v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge) implementsGraphQLInterfaceSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge() {
}

func __unmarshalSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge(b []byte, v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge) error {
	if string(b) == "null" {
		return nil
	}

	var tn struct {
		TypeName string `json:"__typename"`
	}
	err := json.Unmarshal(b, &tn)
	if err != nil {
		return err
	}

	switch tn.TypeName {
	case "SearchBookEdge":
		*v = new(SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge)
		return json.Unmarshal(b, *v)
	case "":
		return fmt.Errorf(
			"response was missing SearchResultEdge.__typename")
	default:
		return fmt.Errorf(
			`unexpected concrete type for SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge: "%v"`, tn.TypeName)
	}
}

func __marshalSearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge(v *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge) ([]byte, error) {

	var typename string
	switch v := (*v).(type) {
	case *SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge:
		typename = "SearchBookEdge"

		result := struct {
			TypeName string `json:"__typename"`
			*SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchBookEdge
		}{typename, v}
		return json.Marshal(result)
	case nil:
		return []byte("null"), nil
	default:
		return nil, fmt.Errorf(
			`unexpected concrete type for SearchGetSearchSuggestionsSearchResultsConnectionEdgesSearchResultEdge: "%T"`, v)
	}
}

// SearchResponse is returned by Search on success.
type SearchResponse struct {
	GetSearchSuggestions SearchGetSearchSuggestionsSearchResultsConnection `json:"getSearchSuggestions"`
}

// GetGetSearchSuggestions returns SearchResponse.GetSearchSuggestions, and is useful for accessing the field via an interface.
func (v *SearchResponse) GetGetSearchSuggestions() SearchGetSearchSuggestionsSearchResultsConnection {
	return v.GetSearchSuggestions
}

// __GetAuthorWorksInput is used internally by genqlient
type __GetAuthorWorksInput struct {
	GetWorksByContributorInput GetWorksByContributorInput `json:"getWorksByContributorInput"`
	Pagination                 PaginationInput            `json:"pagination"`
}

// GetGetWorksByContributorInput returns __GetAuthorWorksInput.GetWorksByContributorInput, and is useful for accessing the field via an interface.
func (v *__GetAuthorWorksInput) GetGetWorksByContributorInput() GetWorksByContributorInput {
	return v.GetWorksByContributorInput
}

// GetPagination returns __GetAuthorWorksInput.Pagination, and is useful for accessing the field via an interface.
func (v *__GetAuthorWorksInput) GetPagination() PaginationInput { return v.Pagination }

// __GetBookInput is used internally by genqlient
type __GetBookInput struct {
	LegacyId int64 `json:"legacyId"`
}

// GetLegacyId returns __GetBookInput.LegacyId, and is useful for accessing the field via an interface.
func (v *__GetBookInput) GetLegacyId() int64 { return v.LegacyId }

// __GetEditionsInput is used internally by genqlient
type __GetEditionsInput struct {
	WorkId     string          `json:"workId"`
	Pagination PaginationInput `json:"pagination"`
}

// GetWorkId returns __GetEditionsInput.WorkId, and is useful for accessing the field via an interface.
func (v *__GetEditionsInput) GetWorkId() string { return v.WorkId }

// GetPagination returns __GetEditionsInput.Pagination, and is useful for accessing the field via an interface.
func (v *__GetEditionsInput) GetPagination() PaginationInput { return v.Pagination }

// __SearchInput is used internally by genqlient
type __SearchInput struct {
	Query string `json:"query"`
}

// GetQuery returns __SearchInput.Query, and is useful for accessing the field via an interface.
func (v *__SearchInput) GetQuery() string { return v.Query }

// The query or mutation executed by GetAuthorWorks.
const GetAuthorWorks_Operation = `
query GetAuthorWorks ($getWorksByContributorInput: GetWorksByContributorInput!, $pagination: PaginationInput!) {
	getWorksByContributor(getWorksByContributorInput: $getWorksByContributorInput, pagination: $pagination) {
		edges {
			node {
				id
				bestBook {
					legacyId
					primaryContributorEdge {
						role
						node {
							legacyId
						}
					}
					secondaryContributorEdges {
						role
					}
				}
			}
		}
		pageInfo {
			hasNextPage
			nextPageToken
		}
	}
}
`

func GetAuthorWorks(
	ctx_ context.Context,
	client_ graphql.Client,
	getWorksByContributorInput GetWorksByContributorInput,
	pagination PaginationInput,
) (*GetAuthorWorksResponse, error) {
	req_ := &graphql.Request{
		OpName: "GetAuthorWorks",
		Query:  GetAuthorWorks_Operation,
		Variables: &__GetAuthorWorksInput{
			GetWorksByContributorInput: getWorksByContributorInput,
			Pagination:                 pagination,
		},
	}
	var err_ error

	var data_ GetAuthorWorksResponse
	resp_ := &graphql.Response{Data: &data_}

	err_ = client_.MakeRequest(
		ctx_,
		req_,
		resp_,
	)

	return &data_, err_
}

// The query or mutation executed by GetBook.
const GetBook_Operation = `
query GetBook ($legacyId: Int!) {
	getBookByLegacyId(legacyId: $legacyId) {
		... BookInfo
		work {
			id
			legacyId
			details {
				webUrl
				publicationTime
			}
			bestBook {
				legacyId
				title
				titlePrimary
				primaryContributorEdge {
					role
					node {
						legacyId
					}
				}
			}
			editions {
				edges {
					node {
						... BookInfo
					}
				}
			}
		}
	}
}
fragment BookInfo on Book {
	id
	legacyId
	description(stripped: true)
	bookGenres {
		genre {
			name
		}
	}
	bookSeries {
		series {
			id
			title
			webUrl
		}
		seriesPlacement
	}
	details {
		asin
		isbn13
		format
		numPages
		language {
			name
		}
		officialUrl
		publisher
		publicationTime
	}
	imageUrl
	primaryContributorEdge {
		node {
			id
			name
			legacyId
			webUrl
			profileImageUrl
			description
		}
	}
	stats {
		averageRating
		ratingsCount
		ratingsSum
	}
	title
	titlePrimary
	webUrl
}
`

func GetBook(
	ctx_ context.Context,
	client_ graphql.Client,
	legacyId int64,
) (*GetBookResponse, error) {
	req_ := &graphql.Request{
		OpName: "GetBook",
		Query:  GetBook_Operation,
		Variables: &__GetBookInput{
			LegacyId: legacyId,
		},
	}
	var err_ error

	var data_ GetBookResponse
	resp_ := &graphql.Response{Data: &data_}

	err_ = client_.MakeRequest(
		ctx_,
		req_,
		resp_,
	)

	return &data_, err_
}

// The query or mutation executed by GetEditions.
const GetEditions_Operation = `
query GetEditions ($workId: ID!, $pagination: PaginationInput!) {
	getEditions(id: $workId, pagination: $pagination) {
		edges {
			node {
				id
				legacyId
			}
		}
		pageInfo {
			hasNextPage
			nextPageToken
		}
	}
}
`

func GetEditions(
	ctx_ context.Context,
	client_ graphql.Client,
	workId string,
	pagination PaginationInput,
) (*GetEditionsResponse, error) {
	req_ := &graphql.Request{
		OpName: "GetEditions",
		Query:  GetEditions_Operation,
		Variables: &__GetEditionsInput{
			WorkId:     workId,
			Pagination: pagination,
		},
	}
	var err_ error

	var data_ GetEditionsResponse
	resp_ := &graphql.Response{Data: &data_}

	err_ = client_.MakeRequest(
		ctx_,
		req_,
		resp_,
	)

	return &data_, err_
}

// The query or mutation executed by GetRecommended.
const GetRecommended_Operation = `
query GetRecommended {
	getHomeWidgets {
		edges {
			node {
				recommendations {
					__typename
					node {
						__typename
						... on Work {
							details {
								webUrl
							}
						}
					}
				}
			}
		}
	}
}
`

func GetRecommended(
	ctx_ context.Context,
	client_ graphql.Client,
) (*GetRecommendedResponse, error) {
	req_ := &graphql.Request{
		OpName: "GetRecommended",
		Query:  GetRecommended_Operation,
	}
	var err_ error

	var data_ GetRecommendedResponse
	resp_ := &graphql.Response{Data: &data_}

	err_ = client_.MakeRequest(
		ctx_,
		req_,
		resp_,
	)

	return &data_, err_
}

// The query or mutation executed by Search.
const Search_Operation = `
query Search ($query: String!) {
	getSearchSuggestions(query: $query) {
		totalCount
		edges {
			__typename
			... on SearchBookEdge {
				node {
					work {
						legacyId
						bestBook {
							primaryContributorEdge {
								node {
									name
									legacyId
								}
							}
						}
					}
					title
					legacyId
				}
			}
		}
	}
}
`

func Search(
	ctx_ context.Context,
	client_ graphql.Client,
	query string,
) (*SearchResponse, error) {
	req_ := &graphql.Request{
		OpName: "Search",
		Query:  Search_Operation,
		Variables: &__SearchInput{
			Query: query,
		},
	}
	var err_ error

	var data_ SearchResponse
	resp_ := &graphql.Response{Data: &data_}

	err_ = client_.MakeRequest(
		ctx_,
		req_,
		resp_,
	)

	return &data_, err_
}
