// Code generated by introspect; EDIT WITH CAUTION.

package schema

type Product struct {
	AvailablePublicationsCount              *Count                           `json:"availablePublicationsCount,omitempty"`
	BundleComponents                        ProductBundleComponentConnection `json:"bundleComponents"`
	Category                                *TaxonomyCategory                `json:"category,omitempty"`
	Collections                             CollectionConnection             `json:"collections"`
	CombinedListing                         *CombinedListing                 `json:"combinedListing"`
	CombinedListingRole                     *CombinedListingsRole            `json:"combinedListingRole,omitempty"`
	CompareAtPriceRange                     *ProductCompareAtPriceRange      `json:"compareAtPriceRange,omitempty"`
	ContextualPricing                       *ProductContextualPricing        `json:"contextualPricing"`
	CreatedAt                               string                           `json:"createdAt"`
	DefaultCursor                           string                           `json:"defaultCursor"`
	Description                             string                           `json:"description"`
	DescriptionHtml                         string                           `json:"descriptionHtml"`
	Events                                  EventConnection                  `json:"events"`
	FeaturedMedia                           *Media                           `json:"featuredMedia,omitempty"`
	Feedback                                *ResourceFeedback                `json:"feedback,omitempty"`
	GiftCardTemplateSuffix                  *string                          `json:"giftCardTemplateSuffix,omitempty"`
	Handle                                  string                           `json:"handle"`
	HasOnlyDefaultVariant                   bool                             `json:"hasOnlyDefaultVariant"`
	HasOutOfStockVariants                   bool                             `json:"hasOutOfStockVariants"`
	HasVariantsThatRequiresComponents       bool                             `json:"hasVariantsThatRequiresComponents"`
	ID                                      string                           `json:"id"`
	InCollection                            bool                             `json:"inCollection"`
	IsGiftCard                              bool                             `json:"isGiftCard"`
	LegacyResourceID                        string                           `json:"legacyResourceId"`
	Media                                   MediaConnection                  `json:"media"`
	MediaCount                              *Count                           `json:"mediaCount,omitempty"`
	Metafield                               *Metafield                       `json:"metafield"`
	Metafields                              MetafieldConnection              `json:"metafields"`
	OnlineStorePreviewURL                   *string                          `json:"onlineStorePreviewUrl,omitempty"`
	OnlineStoreURL                          *string                          `json:"onlineStoreUrl,omitempty"`
	Options                                 []ProductOption                  `json:"options"`
	PriceRangeV2                            ProductPriceRangeV2              `json:"priceRangeV2"`
	ProductType                             string                           `json:"productType"`
	PublishedAt                             *string                          `json:"publishedAt,omitempty"`
	PublishedInContext                      bool                             `json:"publishedInContext"`
	PublishedOnCurrentPublication           bool                             `json:"publishedOnCurrentPublication"`
	PublishedOnPublication                  bool                             `json:"publishedOnPublication"`
	RequiresSellingPlan                     bool                             `json:"requiresSellingPlan"`
	ResourcePublicationOnCurrentPublication *ResourcePublicationV2           `json:"resourcePublicationOnCurrentPublication"`
	ResourcePublications                    ResourcePublicationConnection    `json:"resourcePublications"`
	ResourcePublicationsCount               *Count                           `json:"resourcePublicationsCount,omitempty"`
	ResourcePublicationsV2                  ResourcePublicationV2Connection  `json:"resourcePublicationsV2"`
	RestrictedForResource                   *RestrictedForResource           `json:"restrictedForResource,omitempty"`
	SellingPlanGroups                       SellingPlanGroupConnection       `json:"sellingPlanGroups"`
	SellingPlanGroupsCount                  *Count                           `json:"sellingPlanGroupsCount,omitempty"`
	Seo                                     SEO                              `json:"seo"`
	Status                                  ProductStatus                    `json:"status"`
	Tags                                    []any                            `json:"tags"`
	TemplateSuffix                          *string                          `json:"templateSuffix,omitempty"`
	Title                                   string                           `json:"title"`
	TotalInventory                          int                              `json:"totalInventory"`
	TracksInventory                         bool                             `json:"tracksInventory"`
	Translations                            []any                            `json:"translations"`
	UnpublishedPublications                 PublicationConnection            `json:"unpublishedPublications"`
	UpdatedAt                               string                           `json:"updatedAt"`
	Variants                                ProductVariantConnection         `json:"variants"`
	VariantsCount                           *Count                           `json:"variantsCount,omitempty"`
	Vendor                                  string                           `json:"vendor"`
}

type ProductPriceRangeV2 struct {
	MaxVariantPrice MoneyV2 `json:"maxVariantPrice"`
	MinVariantPrice MoneyV2 `json:"minVariantPrice"`
}

type MoneyV2 struct {
	Amount       float64      `json:"amount"`
	CurrencyCode CurrencyCode `json:"currencyCode"`
}

type CurrencyCode string

const (
	CurrencyCodeUsd CurrencyCode = "USD"
	CurrencyCodeEur CurrencyCode = "EUR"
	CurrencyCodeGbp CurrencyCode = "GBP"
	CurrencyCodeCad CurrencyCode = "CAD"
	CurrencyCodeAfn CurrencyCode = "AFN"
	CurrencyCodeAll CurrencyCode = "ALL"
	CurrencyCodeDzd CurrencyCode = "DZD"
	CurrencyCodeAoa CurrencyCode = "AOA"
	CurrencyCodeArs CurrencyCode = "ARS"
	CurrencyCodeAmd CurrencyCode = "AMD"
	CurrencyCodeAwg CurrencyCode = "AWG"
	CurrencyCodeAud CurrencyCode = "AUD"
	CurrencyCodeBbd CurrencyCode = "BBD"
	CurrencyCodeAzn CurrencyCode = "AZN"
	CurrencyCodeBdt CurrencyCode = "BDT"
	CurrencyCodeBsd CurrencyCode = "BSD"
	CurrencyCodeBhd CurrencyCode = "BHD"
	CurrencyCodeBif CurrencyCode = "BIF"
	CurrencyCodeByn CurrencyCode = "BYN"
	CurrencyCodeBzd CurrencyCode = "BZD"
	CurrencyCodeBmd CurrencyCode = "BMD"
	CurrencyCodeBtn CurrencyCode = "BTN"
	CurrencyCodeBam CurrencyCode = "BAM"
	CurrencyCodeBrl CurrencyCode = "BRL"
	CurrencyCodeBob CurrencyCode = "BOB"
	CurrencyCodeBwp CurrencyCode = "BWP"
	CurrencyCodeBnd CurrencyCode = "BND"
	CurrencyCodeBgn CurrencyCode = "BGN"
	CurrencyCodeMmk CurrencyCode = "MMK"
	CurrencyCodeKhr CurrencyCode = "KHR"
	CurrencyCodeCve CurrencyCode = "CVE"
	CurrencyCodeKyd CurrencyCode = "KYD"
	CurrencyCodeXaf CurrencyCode = "XAF"
	CurrencyCodeClp CurrencyCode = "CLP"
	CurrencyCodeCny CurrencyCode = "CNY"
	CurrencyCodeCop CurrencyCode = "COP"
	CurrencyCodeKmf CurrencyCode = "KMF"
	CurrencyCodeCdf CurrencyCode = "CDF"
	CurrencyCodeCrc CurrencyCode = "CRC"
	CurrencyCodeHrk CurrencyCode = "HRK"
	CurrencyCodeCzk CurrencyCode = "CZK"
	CurrencyCodeDkk CurrencyCode = "DKK"
	CurrencyCodeDjf CurrencyCode = "DJF"
	CurrencyCodeDop CurrencyCode = "DOP"
	CurrencyCodeXcd CurrencyCode = "XCD"
	CurrencyCodeEgp CurrencyCode = "EGP"
	CurrencyCodeErn CurrencyCode = "ERN"
	CurrencyCodeEtb CurrencyCode = "ETB"
	CurrencyCodeFkp CurrencyCode = "FKP"
	CurrencyCodeXpf CurrencyCode = "XPF"
	CurrencyCodeFjd CurrencyCode = "FJD"
	CurrencyCodeGip CurrencyCode = "GIP"
	CurrencyCodeGmd CurrencyCode = "GMD"
	CurrencyCodeGhs CurrencyCode = "GHS"
	CurrencyCodeGtq CurrencyCode = "GTQ"
	CurrencyCodeGyd CurrencyCode = "GYD"
	CurrencyCodeGel CurrencyCode = "GEL"
	CurrencyCodeGnf CurrencyCode = "GNF"
	CurrencyCodeHtg CurrencyCode = "HTG"
	CurrencyCodeHnl CurrencyCode = "HNL"
	CurrencyCodeHkd CurrencyCode = "HKD"
	CurrencyCodeHuf CurrencyCode = "HUF"
	CurrencyCodeIsk CurrencyCode = "ISK"
	CurrencyCodeInr CurrencyCode = "INR"
	CurrencyCodeIdr CurrencyCode = "IDR"
	CurrencyCodeIls CurrencyCode = "ILS"
	CurrencyCodeIrr CurrencyCode = "IRR"
	CurrencyCodeIqd CurrencyCode = "IQD"
	CurrencyCodeJmd CurrencyCode = "JMD"
	CurrencyCodeJpy CurrencyCode = "JPY"
	CurrencyCodeJep CurrencyCode = "JEP"
	CurrencyCodeJod CurrencyCode = "JOD"
	CurrencyCodeKzt CurrencyCode = "KZT"
	CurrencyCodeKes CurrencyCode = "KES"
	CurrencyCodeKID CurrencyCode = "KID"
	CurrencyCodeKwd CurrencyCode = "KWD"
	CurrencyCodeKgs CurrencyCode = "KGS"
	CurrencyCodeLak CurrencyCode = "LAK"
	CurrencyCodeLvl CurrencyCode = "LVL"
	CurrencyCodeLbp CurrencyCode = "LBP"
	CurrencyCodeLsl CurrencyCode = "LSL"
	CurrencyCodeLrd CurrencyCode = "LRD"
	CurrencyCodeLyd CurrencyCode = "LYD"
	CurrencyCodeLtl CurrencyCode = "LTL"
	CurrencyCodeMga CurrencyCode = "MGA"
	CurrencyCodeMkd CurrencyCode = "MKD"
	CurrencyCodeMop CurrencyCode = "MOP"
	CurrencyCodeMwk CurrencyCode = "MWK"
	CurrencyCodeMvr CurrencyCode = "MVR"
	CurrencyCodeMru CurrencyCode = "MRU"
	CurrencyCodeMxn CurrencyCode = "MXN"
	CurrencyCodeMyr CurrencyCode = "MYR"
	CurrencyCodeMur CurrencyCode = "MUR"
	CurrencyCodeMdl CurrencyCode = "MDL"
	CurrencyCodeMad CurrencyCode = "MAD"
	CurrencyCodeMnt CurrencyCode = "MNT"
	CurrencyCodeMzn CurrencyCode = "MZN"
	CurrencyCodeNad CurrencyCode = "NAD"
	CurrencyCodeNpr CurrencyCode = "NPR"
	CurrencyCodeAng CurrencyCode = "ANG"
	CurrencyCodeNzd CurrencyCode = "NZD"
	CurrencyCodeNio CurrencyCode = "NIO"
	CurrencyCodeNgn CurrencyCode = "NGN"
	CurrencyCodeNok CurrencyCode = "NOK"
	CurrencyCodeOmr CurrencyCode = "OMR"
	CurrencyCodePab CurrencyCode = "PAB"
	CurrencyCodePkr CurrencyCode = "PKR"
	CurrencyCodePgk CurrencyCode = "PGK"
	CurrencyCodePyg CurrencyCode = "PYG"
	CurrencyCodePen CurrencyCode = "PEN"
	CurrencyCodePhp CurrencyCode = "PHP"
	CurrencyCodePln CurrencyCode = "PLN"
	CurrencyCodeQar CurrencyCode = "QAR"
	CurrencyCodeRon CurrencyCode = "RON"
	CurrencyCodeRub CurrencyCode = "RUB"
	CurrencyCodeRwf CurrencyCode = "RWF"
	CurrencyCodeWst CurrencyCode = "WST"
	CurrencyCodeShp CurrencyCode = "SHP"
	CurrencyCodeSar CurrencyCode = "SAR"
	CurrencyCodeRsd CurrencyCode = "RSD"
	CurrencyCodeScr CurrencyCode = "SCR"
	CurrencyCodeSll CurrencyCode = "SLL"
	CurrencyCodeSgd CurrencyCode = "SGD"
	CurrencyCodeSdg CurrencyCode = "SDG"
	CurrencyCodeSos CurrencyCode = "SOS"
	CurrencyCodeSyp CurrencyCode = "SYP"
	CurrencyCodeZar CurrencyCode = "ZAR"
	CurrencyCodeKrw CurrencyCode = "KRW"
	CurrencyCodeSsp CurrencyCode = "SSP"
	CurrencyCodeSbd CurrencyCode = "SBD"
	CurrencyCodeLkr CurrencyCode = "LKR"
	CurrencyCodeSrd CurrencyCode = "SRD"
	CurrencyCodeSzl CurrencyCode = "SZL"
	CurrencyCodeSek CurrencyCode = "SEK"
	CurrencyCodeChf CurrencyCode = "CHF"
	CurrencyCodeTwd CurrencyCode = "TWD"
	CurrencyCodeThb CurrencyCode = "THB"
	CurrencyCodeTjs CurrencyCode = "TJS"
	CurrencyCodeTzs CurrencyCode = "TZS"
	CurrencyCodeTop CurrencyCode = "TOP"
	CurrencyCodeTtd CurrencyCode = "TTD"
	CurrencyCodeTnd CurrencyCode = "TND"
	CurrencyCodeTry CurrencyCode = "TRY"
	CurrencyCodeTmt CurrencyCode = "TMT"
	CurrencyCodeUgx CurrencyCode = "UGX"
	CurrencyCodeUah CurrencyCode = "UAH"
	CurrencyCodeAed CurrencyCode = "AED"
	CurrencyCodeUyu CurrencyCode = "UYU"
	CurrencyCodeUzs CurrencyCode = "UZS"
	CurrencyCodeVuv CurrencyCode = "VUV"
	CurrencyCodeVes CurrencyCode = "VES"
	CurrencyCodeVnd CurrencyCode = "VND"
	CurrencyCodeXof CurrencyCode = "XOF"
	CurrencyCodeYer CurrencyCode = "YER"
	CurrencyCodeZmw CurrencyCode = "ZMW"
	CurrencyCodeStn CurrencyCode = "STN"
	CurrencyCodeVed CurrencyCode = "VED"
	CurrencyCodeXxx CurrencyCode = "XXX"
)

type PublicationConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type PageInfo struct {
	EndCursor       *string `json:"endCursor,omitempty"`
	HasNextPage     bool    `json:"hasNextPage"`
	HasPreviousPage bool    `json:"hasPreviousPage"`
	StartCursor     *string `json:"startCursor,omitempty"`
}

type ProductBundleComponentConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type ProductCompareAtPriceRange struct {
	MaxVariantCompareAtPrice MoneyV2 `json:"maxVariantCompareAtPrice"`
	MinVariantCompareAtPrice MoneyV2 `json:"minVariantCompareAtPrice"`
}

type ResourcePublicationV2Connection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type ResourcePublicationV2 struct {
	IsPublished bool         `json:"isPublished"`
	Publication *Publication `json:"publication"`
	PublishDate *string      `json:"publishDate,omitempty"`
	Publishable Publishable  `json:"publishable"`
}

type Publication struct {
	AutoPublish              bool                          `json:"autoPublish"`
	Catalog                  *Catalog                      `json:"catalog,omitempty"`
	CollectionPublicationsV3 ResourcePublicationConnection `json:"collectionPublicationsV3"`
	Collections              CollectionConnection          `json:"collections"`
	HasCollection            bool                          `json:"hasCollection"`
	ID                       string                        `json:"id"`
	Operation                *any                          `json:"operation,omitempty"`
	ProductPublicationsV3    ResourcePublicationConnection `json:"productPublicationsV3"`
	Products                 ProductConnection             `json:"products"`
	SupportsFuturePublishing bool                          `json:"supportsFuturePublishing"`
}

type PublicationOperation struct {
}

type ProductConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type Catalog interface {
	ID() string
	Operations() []any
	PriceList() PriceList
	Publication() Publication
	Status() CatalogStatus
	Title() string
}

type PriceList struct {
	Catalog          *Catalog                 `json:"catalog,omitempty"`
	Currency         CurrencyCode             `json:"currency"`
	FixedPricesCount int                      `json:"fixedPricesCount"`
	ID               string                   `json:"id"`
	Name             string                   `json:"name"`
	Parent           *PriceListParent         `json:"parent"`
	Prices           PriceListPriceConnection `json:"prices"`
	QuantityRules    QuantityRuleConnection   `json:"quantityRules"`
}

type PriceListPriceConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type QuantityRuleConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type PriceListParent struct {
	Adjustment PriceListAdjustment         `json:"adjustment"`
	Settings   PriceListAdjustmentSettings `json:"settings"`
}

type PriceListAdjustment struct {
	Type  PriceListAdjustmentType `json:"type"`
	Value float64                 `json:"value"`
}

type PriceListAdjustmentType string

const (
	PriceListAdjustmentTypePercentageDecrease PriceListAdjustmentType = "PERCENTAGE_DECREASE"
	PriceListAdjustmentTypePercentageIncrease PriceListAdjustmentType = "PERCENTAGE_INCREASE"
)

type PriceListAdjustmentSettings struct {
	CompareAtMode PriceListCompareAtMode `json:"compareAtMode"`
}

type PriceListCompareAtMode string

const (
	PriceListCompareAtModeAdjusted PriceListCompareAtMode = "ADJUSTED"
	PriceListCompareAtModeNullify  PriceListCompareAtMode = "NULLIFY"
)

type CatalogStatus string

const (
	CatalogStatusActive   CatalogStatus = "ACTIVE"
	CatalogStatusArchived CatalogStatus = "ARCHIVED"
	CatalogStatusDraft    CatalogStatus = "DRAFT"
)

type ResourcePublicationConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type CollectionConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type Publishable interface {
	AvailablePublicationsCount() Count
	PublishedOnCurrentPublication() bool
	PublishedOnPublication() bool
	ResourcePublications() ResourcePublicationConnection
	ResourcePublicationsCount() Count
	ResourcePublicationsV2() ResourcePublicationV2Connection
	UnpublishedPublications() PublicationConnection
}

type Count struct {
	Count     int            `json:"count"`
	Precision CountPrecision `json:"precision"`
}

type CountPrecision string

const (
	CountPrecisionExact   CountPrecision = "EXACT"
	CountPrecisionAtLeast CountPrecision = "AT_LEAST"
)

type ResourceFeedback struct {
	Details []any  `json:"details"`
	Summary string `json:"summary"`
}

type Metafield struct {
	CompareDigest    string                        `json:"compareDigest"`
	CreatedAt        string                        `json:"createdAt"`
	Definition       *MetafieldDefinition          `json:"definition"`
	Description      *string                       `json:"description,omitempty"`
	ID               string                        `json:"id"`
	JsonValue        any                           `json:"jsonValue"`
	Key              string                        `json:"key"`
	LegacyResourceID string                        `json:"legacyResourceId"`
	Namespace        string                        `json:"namespace"`
	Owner            HasMetafields                 `json:"owner"`
	OwnerType        MetafieldOwnerType            `json:"ownerType"`
	Reference        *any                          `json:"reference,omitempty"`
	References       *MetafieldReferenceConnection `json:"references,omitempty"`
	Type             string                        `json:"type"`
	UpdatedAt        string                        `json:"updatedAt"`
	Value            string                        `json:"value"`
}

type MetafieldIdentifier struct {
	Key       string `json:"key"`
	Namespace string `json:"namespace"`
	OwnerID   string `json:"ownerId"`
}

type HasMetafields interface {
	Metafield() Metafield
	Metafields() MetafieldConnection
}

type MetafieldConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type MetafieldReference struct {
}

type MetafieldDefinition struct {
	Access                   MetafieldAccess                      `json:"access"`
	Capabilities             *MetafieldCapabilities               `json:"capabilities"`
	Constraints              *MetafieldDefinitionConstraints      `json:"constraints,omitempty"`
	Description              *string                              `json:"description,omitempty"`
	ID                       string                               `json:"id"`
	Key                      string                               `json:"key"`
	Metafields               MetafieldConnection                  `json:"metafields"`
	MetafieldsCount          int                                  `json:"metafieldsCount"`
	Name                     string                               `json:"name"`
	Namespace                string                               `json:"namespace"`
	OwnerType                MetafieldOwnerType                   `json:"ownerType"`
	PinnedPosition           *int                                 `json:"pinnedPosition,omitempty"`
	StandardTemplate         *StandardMetafieldDefinitionTemplate `json:"standardTemplate,omitempty"`
	Type                     MetafieldDefinitionType              `json:"type"`
	UseAsCollectionCondition bool                                 `json:"useAsCollectionCondition"`
	ValidationStatus         MetafieldDefinitionValidationStatus  `json:"validationStatus"`
	Validations              []any                                `json:"validations"`
}

type MetafieldOwnerType string

const (
	MetafieldOwnerTypeAPIPermission             MetafieldOwnerType = "API_PERMISSION"
	MetafieldOwnerTypeCompany                   MetafieldOwnerType = "COMPANY"
	MetafieldOwnerTypeCompanyLocation           MetafieldOwnerType = "COMPANY_LOCATION"
	MetafieldOwnerTypePaymentCustomization      MetafieldOwnerType = "PAYMENT_CUSTOMIZATION"
	MetafieldOwnerTypeValidation                MetafieldOwnerType = "VALIDATION"
	MetafieldOwnerTypeCustomer                  MetafieldOwnerType = "CUSTOMER"
	MetafieldOwnerTypeDeliveryCustomization     MetafieldOwnerType = "DELIVERY_CUSTOMIZATION"
	MetafieldOwnerTypeDraftorder                MetafieldOwnerType = "DRAFTORDER"
	MetafieldOwnerTypeGiftCardTransaction       MetafieldOwnerType = "GIFT_CARD_TRANSACTION"
	MetafieldOwnerTypeMarket                    MetafieldOwnerType = "MARKET"
	MetafieldOwnerTypeCarttransform             MetafieldOwnerType = "CARTTRANSFORM"
	MetafieldOwnerTypeCollection                MetafieldOwnerType = "COLLECTION"
	MetafieldOwnerTypeProduct                   MetafieldOwnerType = "PRODUCT"
	MetafieldOwnerTypeProductvariant            MetafieldOwnerType = "PRODUCTVARIANT"
	MetafieldOwnerTypeSellingPlan               MetafieldOwnerType = "SELLING_PLAN"
	MetafieldOwnerTypeArticle                   MetafieldOwnerType = "ARTICLE"
	MetafieldOwnerTypeBlog                      MetafieldOwnerType = "BLOG"
	MetafieldOwnerTypePage                      MetafieldOwnerType = "PAGE"
	MetafieldOwnerTypeFulfillmentConstraintRule MetafieldOwnerType = "FULFILLMENT_CONSTRAINT_RULE"
	MetafieldOwnerTypeOrderRoutingLocationRule  MetafieldOwnerType = "ORDER_ROUTING_LOCATION_RULE"
	MetafieldOwnerTypeDiscount                  MetafieldOwnerType = "DISCOUNT"
	MetafieldOwnerTypeOrder                     MetafieldOwnerType = "ORDER"
	MetafieldOwnerTypeLocation                  MetafieldOwnerType = "LOCATION"
	MetafieldOwnerTypeShop                      MetafieldOwnerType = "SHOP"
)

type MetafieldDefinitionValidationStatus string

const (
	MetafieldDefinitionValidationStatusAllValid    MetafieldDefinitionValidationStatus = "ALL_VALID"
	MetafieldDefinitionValidationStatusInProgress  MetafieldDefinitionValidationStatus = "IN_PROGRESS"
	MetafieldDefinitionValidationStatusSomeInvalid MetafieldDefinitionValidationStatus = "SOME_INVALID"
)

type MetafieldDefinitionConstraints struct {
	Key    *string                                      `json:"key,omitempty"`
	Values MetafieldDefinitionConstraintValueConnection `json:"values"`
}

type MetafieldDefinitionConstraintValueConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type StandardMetafieldDefinitionTemplate struct {
	Description            *string                 `json:"description,omitempty"`
	ID                     string                  `json:"id"`
	Key                    string                  `json:"key"`
	Name                   string                  `json:"name"`
	Namespace              string                  `json:"namespace"`
	OwnerTypes             []any                   `json:"ownerTypes"`
	Type                   MetafieldDefinitionType `json:"type"`
	Validations            []any                   `json:"validations"`
	VisibleToStorefrontAPI bool                    `json:"visibleToStorefrontApi"`
}

type MetafieldDefinitionType struct {
	Category                     string `json:"category"`
	Name                         string `json:"name"`
	SupportedValidations         []any  `json:"supportedValidations"`
	SupportsDefinitionMigrations bool   `json:"supportsDefinitionMigrations"`
}

type MetafieldAccess struct {
	Admin           *MetafieldAdminAccess          `json:"admin,omitempty"`
	CustomerAccount MetafieldCustomerAccountAccess `json:"customerAccount"`
	Storefront      *MetafieldStorefrontAccess     `json:"storefront,omitempty"`
}

type MetafieldCustomerAccountAccess string

const (
	MetafieldCustomerAccountAccessReadWrite MetafieldCustomerAccountAccess = "READ_WRITE"
	MetafieldCustomerAccountAccessRead      MetafieldCustomerAccountAccess = "READ"
	MetafieldCustomerAccountAccessNone      MetafieldCustomerAccountAccess = "NONE"
)

type MetafieldStorefrontAccess string

const (
	MetafieldStorefrontAccessPublicRead       MetafieldStorefrontAccess = "PUBLIC_READ"
	MetafieldStorefrontAccessNone             MetafieldStorefrontAccess = "NONE"
	MetafieldStorefrontAccessLegacyLiquidOnly MetafieldStorefrontAccess = "LEGACY_LIQUID_ONLY"
)

type MetafieldAdminAccess string

const (
	MetafieldAdminAccessPrivate           MetafieldAdminAccess = "PRIVATE"
	MetafieldAdminAccessPublicRead        MetafieldAdminAccess = "PUBLIC_READ"
	MetafieldAdminAccessPublicReadWrite   MetafieldAdminAccess = "PUBLIC_READ_WRITE"
	MetafieldAdminAccessMerchantRead      MetafieldAdminAccess = "MERCHANT_READ"
	MetafieldAdminAccessMerchantReadWrite MetafieldAdminAccess = "MERCHANT_READ_WRITE"
)

type MetafieldCapabilities struct {
	AdminFilterable          MetafieldCapabilityAdminFilterable          `json:"adminFilterable"`
	SmartCollectionCondition MetafieldCapabilitySmartCollectionCondition `json:"smartCollectionCondition"`
}

type MetafieldCapabilityAdminFilterable struct {
	Eligible bool                                 `json:"eligible"`
	Enabled  bool                                 `json:"enabled"`
	Status   MetafieldDefinitionAdminFilterStatus `json:"status"`
}

type MetafieldDefinitionAdminFilterStatus string

const (
	MetafieldDefinitionAdminFilterStatusNotFilterable MetafieldDefinitionAdminFilterStatus = "NOT_FILTERABLE"
	MetafieldDefinitionAdminFilterStatusInProgress    MetafieldDefinitionAdminFilterStatus = "IN_PROGRESS"
	MetafieldDefinitionAdminFilterStatusFilterable    MetafieldDefinitionAdminFilterStatus = "FILTERABLE"
	MetafieldDefinitionAdminFilterStatusFailed        MetafieldDefinitionAdminFilterStatus = "FAILED"
)

type MetafieldCapabilitySmartCollectionCondition struct {
	Eligible bool `json:"eligible"`
	Enabled  bool `json:"enabled"`
}

type MetafieldReferenceConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type Media interface {
	Alt() string
	ID() string
	MediaContentType() MediaContentType
	MediaErrors() []any
	MediaWarnings() []any
	Preview() MediaPreviewImage
	Status() MediaStatus
}

type MediaContentType string

const (
	MediaContentTypeVideo         MediaContentType = "VIDEO"
	MediaContentTypeExternalVideo MediaContentType = "EXTERNAL_VIDEO"
	MediaContentTypeModel3d       MediaContentType = "MODEL_3D"
	MediaContentTypeImage         MediaContentType = "IMAGE"
)

type MediaPreviewImage struct {
	Image  *Image                  `json:"image"`
	Status MediaPreviewImageStatus `json:"status"`
}

type Image struct {
	AltText    *string             `json:"altText,omitempty"`
	Height     *int                `json:"height,omitempty"`
	ID         *string             `json:"id,omitempty"`
	Metafield  *Metafield          `json:"metafield"`
	Metafields MetafieldConnection `json:"metafields"`
	URL        string              `json:"url"`
	Width      *int                `json:"width,omitempty"`
}

type MediaPreviewImageStatus string

const (
	MediaPreviewImageStatusUploaded   MediaPreviewImageStatus = "UPLOADED"
	MediaPreviewImageStatusProcessing MediaPreviewImageStatus = "PROCESSING"
	MediaPreviewImageStatusReady      MediaPreviewImageStatus = "READY"
	MediaPreviewImageStatusFailed     MediaPreviewImageStatus = "FAILED"
)

type MediaStatus string

const (
	MediaStatusUploaded   MediaStatus = "UPLOADED"
	MediaStatusProcessing MediaStatus = "PROCESSING"
	MediaStatusReady      MediaStatus = "READY"
	MediaStatusFailed     MediaStatus = "FAILED"
)

type ProductStatus string

const (
	ProductStatusActive   ProductStatus = "ACTIVE"
	ProductStatusArchived ProductStatus = "ARCHIVED"
	ProductStatusDraft    ProductStatus = "DRAFT"
)

type ProductVariantConnection struct {
	Edges    []any            `json:"edges"`
	Nodes    []ProductVariant `json:"nodes"`
	PageInfo PageInfo         `json:"pageInfo"`
}

type ProductContextualPricing struct {
	FixedQuantityRulesCount int                              `json:"fixedQuantityRulesCount"`
	MaxVariantPricing       *ProductVariantContextualPricing `json:"maxVariantPricing"`
	MinVariantPricing       *ProductVariantContextualPricing `json:"minVariantPricing"`
	PriceRange              ProductPriceRangeV2              `json:"priceRange"`
}

type ProductVariantContextualPricing struct {
	CompareAtPrice      *MoneyV2                     `json:"compareAtPrice,omitempty"`
	Price               MoneyV2                      `json:"price"`
	QuantityPriceBreaks QuantityPriceBreakConnection `json:"quantityPriceBreaks"`
	QuantityRule        *QuantityRule                `json:"quantityRule"`
}

type QuantityRule struct {
	Increment      int                    `json:"increment"`
	IsDefault      bool                   `json:"isDefault"`
	Maximum        *int                   `json:"maximum,omitempty"`
	Minimum        int                    `json:"minimum"`
	OriginType     QuantityRuleOriginType `json:"originType"`
	ProductVariant *ProductVariant        `json:"productVariant"`
}

type QuantityRuleOriginType string

const (
	QuantityRuleOriginTypeFixed    QuantityRuleOriginType = "FIXED"
	QuantityRuleOriginTypeRelative QuantityRuleOriginType = "RELATIVE"
)

type ProductVariant struct {
	AvailableForSale         bool                              `json:"availableForSale"`
	Barcode                  *string                           `json:"barcode,omitempty"`
	CompareAtPrice           *string                           `json:"compareAtPrice,omitempty"`
	ContextualPricing        *ProductVariantContextualPricing  `json:"contextualPricing"`
	CreatedAt                string                            `json:"createdAt"`
	DefaultCursor            string                            `json:"defaultCursor"`
	DeliveryProfile          *DeliveryProfile                  `json:"deliveryProfile"`
	DisplayName              string                            `json:"displayName"`
	Events                   EventConnection                   `json:"events"`
	ID                       string                            `json:"id"`
	Image                    *Image                            `json:"image"`
	InventoryItem            *InventoryItem                    `json:"inventoryItem"`
	InventoryPolicy          ProductVariantInventoryPolicy     `json:"inventoryPolicy"`
	InventoryQuantity        *int                              `json:"inventoryQuantity,omitempty"`
	LegacyResourceID         string                            `json:"legacyResourceId"`
	Media                    MediaConnection                   `json:"media"`
	Metafield                *Metafield                        `json:"metafield"`
	Metafields               MetafieldConnection               `json:"metafields"`
	Position                 int                               `json:"position"`
	Price                    string                            `json:"price"`
	Product                  *Product                          `json:"product"`
	ProductVariantComponents ProductVariantComponentConnection `json:"productVariantComponents"`
	RequiresComponents       bool                              `json:"requiresComponents"`
	SelectedOptions          []any                             `json:"selectedOptions"`
	SellableOnlineQuantity   int                               `json:"sellableOnlineQuantity"`
	SellingPlanGroups        SellingPlanGroupConnection        `json:"sellingPlanGroups"`
	SellingPlanGroupsCount   *Count                            `json:"sellingPlanGroupsCount,omitempty"`
	Sku                      *string                           `json:"sku,omitempty"`
	TaxCode                  *string                           `json:"taxCode,omitempty"`
	Taxable                  bool                              `json:"taxable"`
	Title                    string                            `json:"title"`
	Translations             []any                             `json:"translations"`
	UnitPriceMeasurement     *UnitPriceMeasurement             `json:"unitPriceMeasurement,omitempty"`
	UpdatedAt                string                            `json:"updatedAt"`
}

type ProductVariantComponentConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type MediaConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type EventConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type ProductVariantInventoryPolicy string

const (
	ProductVariantInventoryPolicyDeny     ProductVariantInventoryPolicy = "DENY"
	ProductVariantInventoryPolicyContinue ProductVariantInventoryPolicy = "CONTINUE"
)

type SellingPlanGroupConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type UnitPriceMeasurement struct {
	MeasuredType   *UnitPriceMeasurementMeasuredType `json:"measuredType,omitempty"`
	QuantityUnit   *UnitPriceMeasurementMeasuredUnit `json:"quantityUnit,omitempty"`
	QuantityValue  float64                           `json:"quantityValue"`
	ReferenceUnit  *UnitPriceMeasurementMeasuredUnit `json:"referenceUnit,omitempty"`
	ReferenceValue int                               `json:"referenceValue"`
}

type UnitPriceMeasurementMeasuredType string

const (
	UnitPriceMeasurementMeasuredTypeVolume UnitPriceMeasurementMeasuredType = "VOLUME"
	UnitPriceMeasurementMeasuredTypeWeight UnitPriceMeasurementMeasuredType = "WEIGHT"
	UnitPriceMeasurementMeasuredTypeLength UnitPriceMeasurementMeasuredType = "LENGTH"
	UnitPriceMeasurementMeasuredTypeArea   UnitPriceMeasurementMeasuredType = "AREA"
)

type UnitPriceMeasurementMeasuredUnit string

const (
	UnitPriceMeasurementMeasuredUnitMl UnitPriceMeasurementMeasuredUnit = "ML"
	UnitPriceMeasurementMeasuredUnitCl UnitPriceMeasurementMeasuredUnit = "CL"
	UnitPriceMeasurementMeasuredUnitL  UnitPriceMeasurementMeasuredUnit = "L"
	UnitPriceMeasurementMeasuredUnitM3 UnitPriceMeasurementMeasuredUnit = "M3"
	UnitPriceMeasurementMeasuredUnitMg UnitPriceMeasurementMeasuredUnit = "MG"
	UnitPriceMeasurementMeasuredUnitG  UnitPriceMeasurementMeasuredUnit = "G"
	UnitPriceMeasurementMeasuredUnitKg UnitPriceMeasurementMeasuredUnit = "KG"
	UnitPriceMeasurementMeasuredUnitMm UnitPriceMeasurementMeasuredUnit = "MM"
	UnitPriceMeasurementMeasuredUnitCm UnitPriceMeasurementMeasuredUnit = "CM"
	UnitPriceMeasurementMeasuredUnitM  UnitPriceMeasurementMeasuredUnit = "M"
	UnitPriceMeasurementMeasuredUnitM2 UnitPriceMeasurementMeasuredUnit = "M2"
)

type DeliveryProfile struct {
	ActiveMethodDefinitionsCount int                           `json:"activeMethodDefinitionsCount"`
	Default                      bool                          `json:"default"`
	ID                           string                        `json:"id"`
	LegacyMode                   bool                          `json:"legacyMode"`
	LocationsWithoutRatesCount   int                           `json:"locationsWithoutRatesCount"`
	Name                         string                        `json:"name"`
	OriginLocationCount          int                           `json:"originLocationCount"`
	ProductVariantsCount         *Count                        `json:"productVariantsCount,omitempty"`
	ProfileItems                 DeliveryProfileItemConnection `json:"profileItems"`
	ProfileLocationGroups        []any                         `json:"profileLocationGroups"`
	SellingPlanGroups            SellingPlanGroupConnection    `json:"sellingPlanGroups"`
	UnassignedLocations          []any                         `json:"unassignedLocations"`
	UnassignedLocationsPaginated LocationConnection            `json:"unassignedLocationsPaginated"`
	ZoneCountryCount             int                           `json:"zoneCountryCount"`
}

type DeliveryProfileItemConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type LocationConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type InventoryItem struct {
	CountryCodeOfOrigin          *CountryCode                          `json:"countryCodeOfOrigin,omitempty"`
	CountryHarmonizedSystemCodes CountryHarmonizedSystemCodeConnection `json:"countryHarmonizedSystemCodes"`
	CreatedAt                    string                                `json:"createdAt"`
	DuplicateSkuCount            int                                   `json:"duplicateSkuCount"`
	HarmonizedSystemCode         *string                               `json:"harmonizedSystemCode,omitempty"`
	ID                           string                                `json:"id"`
	InventoryHistoryURL          *string                               `json:"inventoryHistoryUrl,omitempty"`
	InventoryLevel               *InventoryLevel                       `json:"inventoryLevel"`
	InventoryLevels              InventoryLevelConnection              `json:"inventoryLevels"`
	LegacyResourceID             string                                `json:"legacyResourceId"`
	LocationsCount               *Count                                `json:"locationsCount,omitempty"`
	Measurement                  InventoryItemMeasurement              `json:"measurement"`
	ProvinceCodeOfOrigin         *string                               `json:"provinceCodeOfOrigin,omitempty"`
	RequiresShipping             bool                                  `json:"requiresShipping"`
	Sku                          *string                               `json:"sku,omitempty"`
	Tracked                      bool                                  `json:"tracked"`
	TrackedEditable              EditableProperty                      `json:"trackedEditable"`
	UnitCost                     *MoneyV2                              `json:"unitCost,omitempty"`
	UpdatedAt                    string                                `json:"updatedAt"`
	Variant                      *ProductVariant                       `json:"variant"`
}

type InventoryLevel struct {
	CanDeactivate     bool                               `json:"canDeactivate"`
	CreatedAt         string                             `json:"createdAt"`
	DeactivationAlert *string                            `json:"deactivationAlert,omitempty"`
	ID                string                             `json:"id"`
	Item              *InventoryItem                     `json:"item"`
	Location          *Location                          `json:"location"`
	Quantities        []any                              `json:"quantities"`
	ScheduledChanges  InventoryScheduledChangeConnection `json:"scheduledChanges"`
	UpdatedAt         string                             `json:"updatedAt"`
}

type Location struct {
	Activatable           bool                         `json:"activatable"`
	Address               LocationAddress              `json:"address"`
	AddressVerified       bool                         `json:"addressVerified"`
	CreatedAt             string                       `json:"createdAt"`
	Deactivatable         bool                         `json:"deactivatable"`
	DeactivatedAt         *string                      `json:"deactivatedAt,omitempty"`
	Deletable             bool                         `json:"deletable"`
	FulfillmentService    *FulfillmentService          `json:"fulfillmentService"`
	FulfillsOnlineOrders  bool                         `json:"fulfillsOnlineOrders"`
	HasActiveInventory    bool                         `json:"hasActiveInventory"`
	HasUnfulfilledOrders  bool                         `json:"hasUnfulfilledOrders"`
	ID                    string                       `json:"id"`
	InventoryLevel        *InventoryLevel              `json:"inventoryLevel"`
	InventoryLevels       InventoryLevelConnection     `json:"inventoryLevels"`
	IsActive              bool                         `json:"isActive"`
	IsFulfillmentService  bool                         `json:"isFulfillmentService"`
	LegacyResourceID      string                       `json:"legacyResourceId"`
	LocalPickupSettingsV2 *DeliveryLocalPickupSettings `json:"localPickupSettingsV2,omitempty"`
	Metafield             *Metafield                   `json:"metafield"`
	Metafields            MetafieldConnection          `json:"metafields"`
	Name                  string                       `json:"name"`
	ShipsInventory        bool                         `json:"shipsInventory"`
	SuggestedAddresses    []any                        `json:"suggestedAddresses"`
	UpdatedAt             string                       `json:"updatedAt"`
}

type LocationAddress struct {
	Address1     *string  `json:"address1,omitempty"`
	Address2     *string  `json:"address2,omitempty"`
	City         *string  `json:"city,omitempty"`
	Country      *string  `json:"country,omitempty"`
	CountryCode  *string  `json:"countryCode,omitempty"`
	Formatted    []any    `json:"formatted"`
	Latitude     *float64 `json:"latitude,omitempty"`
	Longitude    *float64 `json:"longitude,omitempty"`
	Phone        *string  `json:"phone,omitempty"`
	Province     *string  `json:"province,omitempty"`
	ProvinceCode *string  `json:"provinceCode,omitempty"`
	Zip          *string  `json:"zip,omitempty"`
}

type InventoryLevelConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type DeliveryLocalPickupSettings struct {
	Instructions string                  `json:"instructions"`
	PickupTime   DeliveryLocalPickupTime `json:"pickupTime"`
}

type DeliveryLocalPickupTime string

const (
	DeliveryLocalPickupTimeOneHour         DeliveryLocalPickupTime = "ONE_HOUR"
	DeliveryLocalPickupTimeTwoHours        DeliveryLocalPickupTime = "TWO_HOURS"
	DeliveryLocalPickupTimeFourHours       DeliveryLocalPickupTime = "FOUR_HOURS"
	DeliveryLocalPickupTimeTwentyFourHours DeliveryLocalPickupTime = "TWENTY_FOUR_HOURS"
	DeliveryLocalPickupTimeTwoToFourDays   DeliveryLocalPickupTime = "TWO_TO_FOUR_DAYS"
	DeliveryLocalPickupTimeFiveOrMoreDays  DeliveryLocalPickupTime = "FIVE_OR_MORE_DAYS"
)

type FulfillmentService struct {
	CallbackURL         *string                `json:"callbackUrl,omitempty"`
	Handle              string                 `json:"handle"`
	ID                  string                 `json:"id"`
	InventoryManagement bool                   `json:"inventoryManagement"`
	Location            *Location              `json:"location"`
	PermitsSkuSharing   bool                   `json:"permitsSkuSharing"`
	ServiceName         string                 `json:"serviceName"`
	TrackingSupport     bool                   `json:"trackingSupport"`
	Type                FulfillmentServiceType `json:"type"`
}

type FulfillmentServiceType string

const (
	FulfillmentServiceTypeGiftCard   FulfillmentServiceType = "GIFT_CARD"
	FulfillmentServiceTypeManual     FulfillmentServiceType = "MANUAL"
	FulfillmentServiceTypeThirdParty FulfillmentServiceType = "THIRD_PARTY"
)

type InventoryScheduledChangeConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type CountryHarmonizedSystemCodeConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type InventoryItemMeasurement struct {
	ID     string  `json:"id"`
	Weight *Weight `json:"weight,omitempty"`
}

type Weight struct {
	Unit  WeightUnit `json:"unit"`
	Value float64    `json:"value"`
}

type WeightUnit string

const (
	WeightUnitKilograms WeightUnit = "KILOGRAMS"
	WeightUnitGrams     WeightUnit = "GRAMS"
	WeightUnitPounds    WeightUnit = "POUNDS"
	WeightUnitOunces    WeightUnit = "OUNCES"
)

type EditableProperty struct {
	Locked bool    `json:"locked"`
	Reason *string `json:"reason,omitempty"`
}

type CountryCode string

const (
	CountryCodeAf CountryCode = "AF"
	CountryCodeAx CountryCode = "AX"
	CountryCodeAl CountryCode = "AL"
	CountryCodeDz CountryCode = "DZ"
	CountryCodeAd CountryCode = "AD"
	CountryCodeAo CountryCode = "AO"
	CountryCodeAi CountryCode = "AI"
	CountryCodeAg CountryCode = "AG"
	CountryCodeAr CountryCode = "AR"
	CountryCodeAm CountryCode = "AM"
	CountryCodeAw CountryCode = "AW"
	CountryCodeAc CountryCode = "AC"
	CountryCodeAu CountryCode = "AU"
	CountryCodeAt CountryCode = "AT"
	CountryCodeAz CountryCode = "AZ"
	CountryCodeBs CountryCode = "BS"
	CountryCodeBh CountryCode = "BH"
	CountryCodeBd CountryCode = "BD"
	CountryCodeBb CountryCode = "BB"
	CountryCodeBy CountryCode = "BY"
	CountryCodeBe CountryCode = "BE"
	CountryCodeBz CountryCode = "BZ"
	CountryCodeBj CountryCode = "BJ"
	CountryCodeBm CountryCode = "BM"
	CountryCodeBt CountryCode = "BT"
	CountryCodeBo CountryCode = "BO"
	CountryCodeBa CountryCode = "BA"
	CountryCodeBw CountryCode = "BW"
	CountryCodeBv CountryCode = "BV"
	CountryCodeBr CountryCode = "BR"
	CountryCodeIo CountryCode = "IO"
	CountryCodeBn CountryCode = "BN"
	CountryCodeBg CountryCode = "BG"
	CountryCodeBf CountryCode = "BF"
	CountryCodeBi CountryCode = "BI"
	CountryCodeKh CountryCode = "KH"
	CountryCodeCa CountryCode = "CA"
	CountryCodeCv CountryCode = "CV"
	CountryCodeBq CountryCode = "BQ"
	CountryCodeKy CountryCode = "KY"
	CountryCodeCf CountryCode = "CF"
	CountryCodeTd CountryCode = "TD"
	CountryCodeCl CountryCode = "CL"
	CountryCodeCn CountryCode = "CN"
	CountryCodeCx CountryCode = "CX"
	CountryCodeCc CountryCode = "CC"
	CountryCodeCo CountryCode = "CO"
	CountryCodeKm CountryCode = "KM"
	CountryCodeCg CountryCode = "CG"
	CountryCodeCd CountryCode = "CD"
	CountryCodeCk CountryCode = "CK"
	CountryCodeCr CountryCode = "CR"
	CountryCodeHr CountryCode = "HR"
	CountryCodeCu CountryCode = "CU"
	CountryCodeCw CountryCode = "CW"
	CountryCodeCy CountryCode = "CY"
	CountryCodeCz CountryCode = "CZ"
	CountryCodeCi CountryCode = "CI"
	CountryCodeDk CountryCode = "DK"
	CountryCodeDj CountryCode = "DJ"
	CountryCodeDm CountryCode = "DM"
	CountryCodeDo CountryCode = "DO"
	CountryCodeEc CountryCode = "EC"
	CountryCodeEg CountryCode = "EG"
	CountryCodeSv CountryCode = "SV"
	CountryCodeGq CountryCode = "GQ"
	CountryCodeEr CountryCode = "ER"
	CountryCodeEe CountryCode = "EE"
	CountryCodeSz CountryCode = "SZ"
	CountryCodeEt CountryCode = "ET"
	CountryCodeFk CountryCode = "FK"
	CountryCodeFo CountryCode = "FO"
	CountryCodeFj CountryCode = "FJ"
	CountryCodeFi CountryCode = "FI"
	CountryCodeFr CountryCode = "FR"
	CountryCodeGf CountryCode = "GF"
	CountryCodePf CountryCode = "PF"
	CountryCodeTf CountryCode = "TF"
	CountryCodeGa CountryCode = "GA"
	CountryCodeGm CountryCode = "GM"
	CountryCodeGe CountryCode = "GE"
	CountryCodeDe CountryCode = "DE"
	CountryCodeGh CountryCode = "GH"
	CountryCodeGi CountryCode = "GI"
	CountryCodeGr CountryCode = "GR"
	CountryCodeGl CountryCode = "GL"
	CountryCodeGd CountryCode = "GD"
	CountryCodeGp CountryCode = "GP"
	CountryCodeGt CountryCode = "GT"
	CountryCodeGg CountryCode = "GG"
	CountryCodeGn CountryCode = "GN"
	CountryCodeGw CountryCode = "GW"
	CountryCodeGy CountryCode = "GY"
	CountryCodeHt CountryCode = "HT"
	CountryCodeHm CountryCode = "HM"
	CountryCodeVa CountryCode = "VA"
	CountryCodeHn CountryCode = "HN"
	CountryCodeHk CountryCode = "HK"
	CountryCodeHu CountryCode = "HU"
	CountryCodeIs CountryCode = "IS"
	CountryCodeIn CountryCode = "IN"
	CountryCodeID CountryCode = "ID"
	CountryCodeIr CountryCode = "IR"
	CountryCodeIq CountryCode = "IQ"
	CountryCodeIe CountryCode = "IE"
	CountryCodeIm CountryCode = "IM"
	CountryCodeIl CountryCode = "IL"
	CountryCodeIt CountryCode = "IT"
	CountryCodeJm CountryCode = "JM"
	CountryCodeJp CountryCode = "JP"
	CountryCodeJe CountryCode = "JE"
	CountryCodeJo CountryCode = "JO"
	CountryCodeKz CountryCode = "KZ"
	CountryCodeKe CountryCode = "KE"
	CountryCodeKi CountryCode = "KI"
	CountryCodeKp CountryCode = "KP"
	CountryCodeXk CountryCode = "XK"
	CountryCodeKw CountryCode = "KW"
	CountryCodeKg CountryCode = "KG"
	CountryCodeLa CountryCode = "LA"
	CountryCodeLv CountryCode = "LV"
	CountryCodeLb CountryCode = "LB"
	CountryCodeLs CountryCode = "LS"
	CountryCodeLr CountryCode = "LR"
	CountryCodeLy CountryCode = "LY"
	CountryCodeLi CountryCode = "LI"
	CountryCodeLt CountryCode = "LT"
	CountryCodeLu CountryCode = "LU"
	CountryCodeMo CountryCode = "MO"
	CountryCodeMg CountryCode = "MG"
	CountryCodeMw CountryCode = "MW"
	CountryCodeMy CountryCode = "MY"
	CountryCodeMv CountryCode = "MV"
	CountryCodeMl CountryCode = "ML"
	CountryCodeMt CountryCode = "MT"
	CountryCodeMq CountryCode = "MQ"
	CountryCodeMr CountryCode = "MR"
	CountryCodeMu CountryCode = "MU"
	CountryCodeYt CountryCode = "YT"
	CountryCodeMx CountryCode = "MX"
	CountryCodeMd CountryCode = "MD"
	CountryCodeMc CountryCode = "MC"
	CountryCodeMn CountryCode = "MN"
	CountryCodeMe CountryCode = "ME"
	CountryCodeMs CountryCode = "MS"
	CountryCodeMa CountryCode = "MA"
	CountryCodeMz CountryCode = "MZ"
	CountryCodeMm CountryCode = "MM"
	CountryCodeNa CountryCode = "NA"
	CountryCodeNr CountryCode = "NR"
	CountryCodeNp CountryCode = "NP"
	CountryCodeNl CountryCode = "NL"
	CountryCodeAn CountryCode = "AN"
	CountryCodeNc CountryCode = "NC"
	CountryCodeNz CountryCode = "NZ"
	CountryCodeNi CountryCode = "NI"
	CountryCodeNe CountryCode = "NE"
	CountryCodeNg CountryCode = "NG"
	CountryCodeNu CountryCode = "NU"
	CountryCodeNf CountryCode = "NF"
	CountryCodeMk CountryCode = "MK"
	CountryCodeNo CountryCode = "NO"
	CountryCodeOm CountryCode = "OM"
	CountryCodePk CountryCode = "PK"
	CountryCodePs CountryCode = "PS"
	CountryCodePa CountryCode = "PA"
	CountryCodePg CountryCode = "PG"
	CountryCodePy CountryCode = "PY"
	CountryCodePe CountryCode = "PE"
	CountryCodePh CountryCode = "PH"
	CountryCodePn CountryCode = "PN"
	CountryCodePl CountryCode = "PL"
	CountryCodePt CountryCode = "PT"
	CountryCodeQa CountryCode = "QA"
	CountryCodeCm CountryCode = "CM"
	CountryCodeRe CountryCode = "RE"
	CountryCodeRo CountryCode = "RO"
	CountryCodeRu CountryCode = "RU"
	CountryCodeRw CountryCode = "RW"
	CountryCodeBl CountryCode = "BL"
	CountryCodeSh CountryCode = "SH"
	CountryCodeKn CountryCode = "KN"
	CountryCodeLc CountryCode = "LC"
	CountryCodeMf CountryCode = "MF"
	CountryCodePm CountryCode = "PM"
	CountryCodeWs CountryCode = "WS"
	CountryCodeSm CountryCode = "SM"
	CountryCodeSt CountryCode = "ST"
	CountryCodeSa CountryCode = "SA"
	CountryCodeSn CountryCode = "SN"
	CountryCodeRs CountryCode = "RS"
	CountryCodeSc CountryCode = "SC"
	CountryCodeSl CountryCode = "SL"
	CountryCodeSg CountryCode = "SG"
	CountryCodeSx CountryCode = "SX"
	CountryCodeSk CountryCode = "SK"
	CountryCodeSi CountryCode = "SI"
	CountryCodeSb CountryCode = "SB"
	CountryCodeSo CountryCode = "SO"
	CountryCodeZa CountryCode = "ZA"
	CountryCodeGs CountryCode = "GS"
	CountryCodeKr CountryCode = "KR"
	CountryCodeSs CountryCode = "SS"
	CountryCodeEs CountryCode = "ES"
	CountryCodeLk CountryCode = "LK"
	CountryCodeVc CountryCode = "VC"
	CountryCodeSd CountryCode = "SD"
	CountryCodeSr CountryCode = "SR"
	CountryCodeSj CountryCode = "SJ"
	CountryCodeSe CountryCode = "SE"
	CountryCodeCh CountryCode = "CH"
	CountryCodeSy CountryCode = "SY"
	CountryCodeTw CountryCode = "TW"
	CountryCodeTj CountryCode = "TJ"
	CountryCodeTz CountryCode = "TZ"
	CountryCodeTh CountryCode = "TH"
	CountryCodeTl CountryCode = "TL"
	CountryCodeTg CountryCode = "TG"
	CountryCodeTk CountryCode = "TK"
	CountryCodeTo CountryCode = "TO"
	CountryCodeTt CountryCode = "TT"
	CountryCodeTa CountryCode = "TA"
	CountryCodeTn CountryCode = "TN"
	CountryCodeTr CountryCode = "TR"
	CountryCodeTm CountryCode = "TM"
	CountryCodeTc CountryCode = "TC"
	CountryCodeTv CountryCode = "TV"
	CountryCodeUg CountryCode = "UG"
	CountryCodeUa CountryCode = "UA"
	CountryCodeAe CountryCode = "AE"
	CountryCodeGb CountryCode = "GB"
	CountryCodeUs CountryCode = "US"
	CountryCodeUm CountryCode = "UM"
	CountryCodeUy CountryCode = "UY"
	CountryCodeUz CountryCode = "UZ"
	CountryCodeVu CountryCode = "VU"
	CountryCodeVe CountryCode = "VE"
	CountryCodeVn CountryCode = "VN"
	CountryCodeVg CountryCode = "VG"
	CountryCodeWf CountryCode = "WF"
	CountryCodeEh CountryCode = "EH"
	CountryCodeYe CountryCode = "YE"
	CountryCodeZm CountryCode = "ZM"
	CountryCodeZw CountryCode = "ZW"
	CountryCodeZz CountryCode = "ZZ"
)

type QuantityPriceBreakConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type CombinedListingsRole string

const (
	CombinedListingsRoleParent CombinedListingsRole = "PARENT"
	CombinedListingsRoleChild  CombinedListingsRole = "CHILD"
)

type TaxonomyCategory struct {
	AncestorIds []any                               `json:"ancestorIds"`
	Attributes  TaxonomyCategoryAttributeConnection `json:"attributes"`
	ChildrenIds []any                               `json:"childrenIds"`
	FullName    string                              `json:"fullName"`
	ID          string                              `json:"id"`
	IsArchived  bool                                `json:"isArchived"`
	IsLeaf      bool                                `json:"isLeaf"`
	IsRoot      bool                                `json:"isRoot"`
	Level       int                                 `json:"level"`
	Name        string                              `json:"name"`
	ParentID    *string                             `json:"parentId,omitempty"`
}

type TaxonomyCategoryAttributeConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type CombinedListing struct {
	CombinedListingChildren CombinedListingChildConnection `json:"combinedListingChildren"`
	ParentProduct           *Product                       `json:"parentProduct"`
}

type CombinedListingChildConnection struct {
	Edges    []any    `json:"edges"`
	Nodes    []any    `json:"nodes"`
	PageInfo PageInfo `json:"pageInfo"`
}

type RestrictedForResource struct {
	Restricted       bool   `json:"restricted"`
	RestrictedReason string `json:"restrictedReason"`
}

type SEO struct {
	Description *string `json:"description,omitempty"`
	Title       *string `json:"title,omitempty"`
}

type ProductOption struct {
	ID              string               `json:"id"`
	LinkedMetafield *LinkedMetafield     `json:"linkedMetafield,omitempty"`
	Name            string               `json:"name"`
	OptionValues    []ProductOptionValue `json:"optionValues"`
	Position        int                  `json:"position"`
	Translations    []any                `json:"translations"`
	Values          []string             `json:"values"`
}

type LinkedMetafield struct {
	Key       *string `json:"key,omitempty"`
	Namespace *string `json:"namespace,omitempty"`
}

type ProductOptionValue struct {
	HasVariants          bool                      `json:"hasVariants"`
	ID                   string                    `json:"id"`
	LinkedMetafieldValue *string                   `json:"linkedMetafieldValue,omitempty"`
	Name                 string                    `json:"name"`
	Swatch               *ProductOptionValueSwatch `json:"swatch"`
	Translations         []any                     `json:"translations"`
}

type ProductOptionValueSwatch struct {
	Color *string     `json:"color,omitempty"`
	Image *MediaImage `json:"image"`
}

type MediaImage struct {
	Alt              *string                   `json:"alt,omitempty"`
	CreatedAt        string                    `json:"createdAt"`
	FileErrors       []any                     `json:"fileErrors"`
	FileStatus       FileStatus                `json:"fileStatus"`
	ID               string                    `json:"id"`
	Image            *Image                    `json:"image"`
	MediaContentType MediaContentType          `json:"mediaContentType"`
	MediaErrors      []any                     `json:"mediaErrors"`
	MediaWarnings    []any                     `json:"mediaWarnings"`
	Metafield        *Metafield                `json:"metafield"`
	Metafields       MetafieldConnection       `json:"metafields"`
	MimeType         *string                   `json:"mimeType,omitempty"`
	OriginalSource   *MediaImageOriginalSource `json:"originalSource,omitempty"`
	Preview          *MediaPreviewImage        `json:"preview"`
	Status           MediaStatus               `json:"status"`
	UpdatedAt        string                    `json:"updatedAt"`
}

type FileStatus string

const (
	FileStatusUploaded   FileStatus = "UPLOADED"
	FileStatusProcessing FileStatus = "PROCESSING"
	FileStatusReady      FileStatus = "READY"
	FileStatusFailed     FileStatus = "FAILED"
)

type MediaImageOriginalSource struct {
	FileSize *int    `json:"fileSize,omitempty"`
	URL      *string `json:"url,omitempty"`
}
