// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.

package graphql

import (
	"bytes"
	"fmt"
	"io"
	"strconv"
	"time"

	"github.com/99designs/gqlgen/graphql"
)

type DraftData interface {
	IsDraftData()
}

type EditDetails interface {
	IsEditDetails()
}

type EditTarget interface {
	IsEditTarget()
}

type NotificationData interface {
	IsNotificationData()
}

type SceneDraftPerformer interface {
	IsSceneDraftPerformer()
}

type SceneDraftStudio interface {
	IsSceneDraftStudio()
}

type SceneDraftTag interface {
	IsSceneDraftTag()
}

type ActivateNewUserInput struct {
	Name          string `json:"name"`
	ActivationKey string `json:"activation_key"`
	Password      string `json:"password"`
}

type ApplyEditInput struct {
	ID string `json:"id"`
}

type BodyModification struct {
	Location    string  `json:"location"`
	Description *string `json:"description,omitempty"`
}

type BodyModificationCriterionInput struct {
	Location    *string           `json:"location,omitempty"`
	Description *string           `json:"description,omitempty"`
	Modifier    CriterionModifier `json:"modifier"`
}

type BodyModificationInput struct {
	Location    string  `json:"location"`
	Description *string `json:"description,omitempty"`
}

type BreastTypeCriterionInput struct {
	Value    *BreastTypeEnum   `json:"value,omitempty"`
	Modifier CriterionModifier `json:"modifier"`
}

type CancelEditInput struct {
	ID string `json:"id"`
}

type CommentCommentedEdit struct {
	Comment *EditComment `json:"comment"`
}

func (CommentCommentedEdit) IsNotificationData() {}

type CommentOwnEdit struct {
	Comment *EditComment `json:"comment"`
}

func (CommentOwnEdit) IsNotificationData() {}

type CommentVotedEdit struct {
	Comment *EditComment `json:"comment"`
}

func (CommentVotedEdit) IsNotificationData() {}

type DateCriterionInput struct {
	Value    string            `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type DownvoteOwnEdit struct {
	Edit *Edit `json:"edit"`
}

func (DownvoteOwnEdit) IsNotificationData() {}

type Draft struct {
	ID      string    `json:"id"`
	Created time.Time `json:"created"`
	Expires time.Time `json:"expires"`
	Data    DraftData `json:"data"`
}

type DraftEntity struct {
	Name string  `json:"name"`
	ID   *string `json:"id,omitempty"`
}

func (DraftEntity) IsSceneDraftPerformer() {}

func (DraftEntity) IsSceneDraftStudio() {}

func (DraftEntity) IsSceneDraftTag() {}

type DraftEntityInput struct {
	Name string  `json:"name"`
	ID   *string `json:"id,omitempty"`
}

type DraftFingerprint struct {
	Hash      string               `json:"hash"`
	Algorithm FingerprintAlgorithm `json:"algorithm"`
	Duration  int                  `json:"duration"`
}

type DraftSubmissionStatus struct {
	ID *string `json:"id,omitempty"`
}

type Edit struct {
	ID   string `json:"id"`
	User *User  `json:"user,omitempty"`
	// Object being edited - null if creating a new object
	Target     EditTarget     `json:"target,omitempty"`
	TargetType TargetTypeEnum `json:"target_type"`
	// Objects to merge with the target. Only applicable to merges
	MergeSources []EditTarget  `json:"merge_sources"`
	Operation    OperationEnum `json:"operation"`
	Bot          bool          `json:"bot"`
	Details      EditDetails   `json:"details,omitempty"`
	// Previous state of fields being modified - null if operation is create or delete.
	OldDetails EditDetails `json:"old_details,omitempty"`
	// Entity specific options
	Options  *PerformerEditOptions `json:"options,omitempty"`
	Comments []*EditComment        `json:"comments"`
	Votes    []*EditVote           `json:"votes"`
	//  = Accepted - Rejected
	VoteCount int `json:"vote_count"`
	// Is the edit considered destructive.
	Destructive bool           `json:"destructive"`
	Status      VoteStatusEnum `json:"status"`
	Applied     bool           `json:"applied"`
	UpdateCount int            `json:"update_count"`
	Updatable   bool           `json:"updatable"`
	Created     time.Time      `json:"created"`
	Updated     *time.Time     `json:"updated,omitempty"`
	Closed      *time.Time     `json:"closed,omitempty"`
	Expires     *time.Time     `json:"expires,omitempty"`
}

type EditComment struct {
	ID      string    `json:"id"`
	User    *User     `json:"user,omitempty"`
	Date    time.Time `json:"date"`
	Comment string    `json:"comment"`
	Edit    *Edit     `json:"edit"`
}

type EditCommentInput struct {
	ID      string `json:"id"`
	Comment string `json:"comment"`
}

type EditInput struct {
	// Not required for create type
	ID        *string       `json:"id,omitempty"`
	Operation OperationEnum `json:"operation"`
	// Only required for merge type
	MergeSourceIds []string `json:"merge_source_ids,omitempty"`
	Comment        *string  `json:"comment,omitempty"`
	// Edit submitted by an automated script. Requires bot permission
	Bot *bool `json:"bot,omitempty"`
}

type EditQueryInput struct {
	// Filter by user id
	UserID *string `json:"user_id,omitempty"`
	// Filter by status
	Status *VoteStatusEnum `json:"status,omitempty"`
	// Filter by operation
	Operation *OperationEnum `json:"operation,omitempty"`
	// Filter by vote count
	VoteCount *IntCriterionInput `json:"vote_count,omitempty"`
	// Filter by applied status
	Applied *bool `json:"applied,omitempty"`
	// Filter by target type
	TargetType *TargetTypeEnum `json:"target_type,omitempty"`
	// Filter by target id
	TargetID *string `json:"target_id,omitempty"`
	// Filter by favorite status
	IsFavorite *bool `json:"is_favorite,omitempty"`
	// Filter by user voted status
	Voted *UserVotedFilterEnum `json:"voted,omitempty"`
	// Filter to bot edits only
	IsBot *bool `json:"is_bot,omitempty"`
	// Filter out user's own edits
	IncludeUserSubmitted *bool             `json:"include_user_submitted,omitempty"`
	Page                 int               `json:"page"`
	PerPage              int               `json:"per_page"`
	Direction            SortDirectionEnum `json:"direction"`
	Sort                 EditSortEnum      `json:"sort"`
}

type EditVote struct {
	User *User        `json:"user,omitempty"`
	Date time.Time    `json:"date"`
	Vote VoteTypeEnum `json:"vote"`
}

type EditVoteInput struct {
	ID   string       `json:"id"`
	Vote VoteTypeEnum `json:"vote"`
}

type EyeColorCriterionInput struct {
	Value    *EyeColorEnum     `json:"value,omitempty"`
	Modifier CriterionModifier `json:"modifier"`
}

type FailedOwnEdit struct {
	Edit *Edit `json:"edit"`
}

func (FailedOwnEdit) IsNotificationData() {}

type FavoritePerformerEdit struct {
	Edit *Edit `json:"edit"`
}

func (FavoritePerformerEdit) IsNotificationData() {}

type FavoritePerformerScene struct {
	Scene *Scene `json:"scene"`
}

func (FavoritePerformerScene) IsNotificationData() {}

type FavoriteStudioEdit struct {
	Edit *Edit `json:"edit"`
}

func (FavoriteStudioEdit) IsNotificationData() {}

type FavoriteStudioScene struct {
	Scene *Scene `json:"scene"`
}

func (FavoriteStudioScene) IsNotificationData() {}

type Fingerprint struct {
	Hash      string               `json:"hash"`
	Algorithm FingerprintAlgorithm `json:"algorithm"`
	Duration  int                  `json:"duration"`
	// number of times this fingerprint has been submitted (excluding reports)
	Submissions int `json:"submissions"`
	// number of times this fingerprint has been reported
	Reports int       `json:"reports"`
	Created time.Time `json:"created"`
	Updated time.Time `json:"updated"`
	// true if the current user submitted this fingerprint
	UserSubmitted bool `json:"user_submitted"`
	// true if the current user reported this fingerprint
	UserReported bool `json:"user_reported"`
}

type FingerprintEditInput struct {
	UserIds     []string             `json:"user_ids,omitempty"`
	Hash        string               `json:"hash"`
	Algorithm   FingerprintAlgorithm `json:"algorithm"`
	Duration    int                  `json:"duration"`
	Created     time.Time            `json:"created"`
	Submissions *int                 `json:"submissions,omitempty"`
	Updated     *time.Time           `json:"updated,omitempty"`
}

type FingerprintInput struct {
	// assumes current user if omitted. Ignored for non-modify Users
	UserIds   []string             `json:"user_ids,omitempty"`
	Hash      string               `json:"hash"`
	Algorithm FingerprintAlgorithm `json:"algorithm"`
	Duration  int                  `json:"duration"`
}

type FingerprintQueryInput struct {
	Hash      string               `json:"hash"`
	Algorithm FingerprintAlgorithm `json:"algorithm"`
}

type FingerprintSubmission struct {
	SceneID     string                     `json:"scene_id"`
	Fingerprint *FingerprintInput          `json:"fingerprint"`
	Unmatch     *bool                      `json:"unmatch,omitempty"`
	Vote        *FingerprintSubmissionType `json:"vote,omitempty"`
}

type FingerprintedSceneEdit struct {
	Edit *Edit `json:"edit"`
}

func (FingerprintedSceneEdit) IsNotificationData() {}

type FuzzyDate struct {
	Date     string           `json:"date"`
	Accuracy DateAccuracyEnum `json:"accuracy"`
}

type GenerateInviteCodeInput struct {
	Keys *int `json:"keys,omitempty"`
	Uses *int `json:"uses,omitempty"`
	TTL  *int `json:"ttl,omitempty"`
}

type GrantInviteInput struct {
	UserID string `json:"user_id"`
	Amount int    `json:"amount"`
}

type HairColorCriterionInput struct {
	Value    *HairColorEnum    `json:"value,omitempty"`
	Modifier CriterionModifier `json:"modifier"`
}

type IDCriterionInput struct {
	Value    []string          `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type Image struct {
	ID     string `json:"id"`
	URL    string `json:"url"`
	Width  int    `json:"width"`
	Height int    `json:"height"`
}

type ImageCreateInput struct {
	URL  *string         `json:"url,omitempty"`
	File *graphql.Upload `json:"file,omitempty"`
}

type ImageDestroyInput struct {
	ID string `json:"id"`
}

type ImageUpdateInput struct {
	ID  string  `json:"id"`
	URL *string `json:"url,omitempty"`
}

type IntCriterionInput struct {
	Value    int               `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type InviteKey struct {
	ID      string     `json:"id"`
	Uses    *int       `json:"uses,omitempty"`
	Expires *time.Time `json:"expires,omitempty"`
}

type MarkNotificationReadInput struct {
	Type NotificationEnum `json:"type"`
	ID   string           `json:"id"`
}

type Measurements struct {
	CupSize  *string `json:"cup_size,omitempty"`
	BandSize *int    `json:"band_size,omitempty"`
	Waist    *int    `json:"waist,omitempty"`
	Hip      *int    `json:"hip,omitempty"`
}

type MultiIDCriterionInput struct {
	Value    []string          `json:"value,omitempty"`
	Modifier CriterionModifier `json:"modifier"`
}

type MultiStringCriterionInput struct {
	Value    []string          `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type Mutation struct {
}

type NewUserInput struct {
	Email     string  `json:"email"`
	InviteKey *string `json:"invite_key,omitempty"`
}

type Notification struct {
	Created time.Time        `json:"created"`
	Read    bool             `json:"read"`
	Data    NotificationData `json:"data"`
}

type Performer struct {
	ID             string         `json:"id"`
	Name           string         `json:"name"`
	Disambiguation *string        `json:"disambiguation,omitempty"`
	Aliases        []string       `json:"aliases"`
	Gender         *GenderEnum    `json:"gender,omitempty"`
	Urls           []*URL         `json:"urls"`
	Birthdate      *FuzzyDate     `json:"birthdate,omitempty"`
	BirthDate      *string        `json:"birth_date,omitempty"`
	DeathDate      *string        `json:"death_date,omitempty"`
	Age            *int           `json:"age,omitempty"`
	Ethnicity      *EthnicityEnum `json:"ethnicity,omitempty"`
	Country        *string        `json:"country,omitempty"`
	EyeColor       *EyeColorEnum  `json:"eye_color,omitempty"`
	HairColor      *HairColorEnum `json:"hair_color,omitempty"`
	// Height in cm
	Height          *int                `json:"height,omitempty"`
	Measurements    *Measurements       `json:"measurements"`
	CupSize         *string             `json:"cup_size,omitempty"`
	BandSize        *int                `json:"band_size,omitempty"`
	WaistSize       *int                `json:"waist_size,omitempty"`
	HipSize         *int                `json:"hip_size,omitempty"`
	BreastType      *BreastTypeEnum     `json:"breast_type,omitempty"`
	CareerStartYear *int                `json:"career_start_year,omitempty"`
	CareerEndYear   *int                `json:"career_end_year,omitempty"`
	Tattoos         []*BodyModification `json:"tattoos,omitempty"`
	Piercings       []*BodyModification `json:"piercings,omitempty"`
	Images          []*Image            `json:"images"`
	Deleted         bool                `json:"deleted"`
	Edits           []*Edit             `json:"edits"`
	SceneCount      int                 `json:"scene_count"`
	Scenes          []*Scene            `json:"scenes"`
	// IDs of performers that were merged into this one
	MergedIds []string `json:"merged_ids"`
	// ID of performer that replaces this one
	MergedIntoID *string            `json:"merged_into_id,omitempty"`
	Studios      []*PerformerStudio `json:"studios"`
	IsFavorite   bool               `json:"is_favorite"`
	Created      time.Time          `json:"created"`
	Updated      time.Time          `json:"updated"`
}

func (Performer) IsEditTarget() {}

func (Performer) IsSceneDraftPerformer() {}

type PerformerAppearance struct {
	Performer *Performer `json:"performer"`
	// Performing as alias
	As *string `json:"as,omitempty"`
}

type PerformerAppearanceInput struct {
	PerformerID string `json:"performer_id"`
	// Performing as alias
	As *string `json:"as,omitempty"`
}

type PerformerCreateInput struct {
	Name            string                   `json:"name"`
	Disambiguation  *string                  `json:"disambiguation,omitempty"`
	Aliases         []string                 `json:"aliases,omitempty"`
	Gender          *GenderEnum              `json:"gender,omitempty"`
	Urls            []*URLInput              `json:"urls,omitempty"`
	Birthdate       *string                  `json:"birthdate,omitempty"`
	Deathdate       *string                  `json:"deathdate,omitempty"`
	Ethnicity       *EthnicityEnum           `json:"ethnicity,omitempty"`
	Country         *string                  `json:"country,omitempty"`
	EyeColor        *EyeColorEnum            `json:"eye_color,omitempty"`
	HairColor       *HairColorEnum           `json:"hair_color,omitempty"`
	Height          *int                     `json:"height,omitempty"`
	CupSize         *string                  `json:"cup_size,omitempty"`
	BandSize        *int                     `json:"band_size,omitempty"`
	WaistSize       *int                     `json:"waist_size,omitempty"`
	HipSize         *int                     `json:"hip_size,omitempty"`
	BreastType      *BreastTypeEnum          `json:"breast_type,omitempty"`
	CareerStartYear *int                     `json:"career_start_year,omitempty"`
	CareerEndYear   *int                     `json:"career_end_year,omitempty"`
	Tattoos         []*BodyModificationInput `json:"tattoos,omitempty"`
	Piercings       []*BodyModificationInput `json:"piercings,omitempty"`
	ImageIds        []string                 `json:"image_ids,omitempty"`
	DraftID         *string                  `json:"draft_id,omitempty"`
}

type PerformerDestroyInput struct {
	ID string `json:"id"`
}

type PerformerDraft struct {
	ID              *string  `json:"id,omitempty"`
	Name            string   `json:"name"`
	Disambiguation  *string  `json:"disambiguation,omitempty"`
	Aliases         *string  `json:"aliases,omitempty"`
	Gender          *string  `json:"gender,omitempty"`
	Birthdate       *string  `json:"birthdate,omitempty"`
	Deathdate       *string  `json:"deathdate,omitempty"`
	Urls            []string `json:"urls,omitempty"`
	Ethnicity       *string  `json:"ethnicity,omitempty"`
	Country         *string  `json:"country,omitempty"`
	EyeColor        *string  `json:"eye_color,omitempty"`
	HairColor       *string  `json:"hair_color,omitempty"`
	Height          *string  `json:"height,omitempty"`
	Measurements    *string  `json:"measurements,omitempty"`
	BreastType      *string  `json:"breast_type,omitempty"`
	Tattoos         *string  `json:"tattoos,omitempty"`
	Piercings       *string  `json:"piercings,omitempty"`
	CareerStartYear *int     `json:"career_start_year,omitempty"`
	CareerEndYear   *int     `json:"career_end_year,omitempty"`
	Image           *Image   `json:"image,omitempty"`
}

func (PerformerDraft) IsDraftData() {}

type PerformerDraftInput struct {
	ID              *string         `json:"id,omitempty"`
	Disambiguation  *string         `json:"disambiguation,omitempty"`
	Name            string          `json:"name"`
	Aliases         *string         `json:"aliases,omitempty"`
	Gender          *string         `json:"gender,omitempty"`
	Birthdate       *string         `json:"birthdate,omitempty"`
	Deathdate       *string         `json:"deathdate,omitempty"`
	Urls            []string        `json:"urls,omitempty"`
	Ethnicity       *string         `json:"ethnicity,omitempty"`
	Country         *string         `json:"country,omitempty"`
	EyeColor        *string         `json:"eye_color,omitempty"`
	HairColor       *string         `json:"hair_color,omitempty"`
	Height          *string         `json:"height,omitempty"`
	Measurements    *string         `json:"measurements,omitempty"`
	BreastType      *string         `json:"breast_type,omitempty"`
	Tattoos         *string         `json:"tattoos,omitempty"`
	Piercings       *string         `json:"piercings,omitempty"`
	CareerStartYear *int            `json:"career_start_year,omitempty"`
	CareerEndYear   *int            `json:"career_end_year,omitempty"`
	Image           *graphql.Upload `json:"image,omitempty"`
}

type PerformerEdit struct {
	Name           *string        `json:"name,omitempty"`
	Disambiguation *string        `json:"disambiguation,omitempty"`
	AddedAliases   []string       `json:"added_aliases,omitempty"`
	RemovedAliases []string       `json:"removed_aliases,omitempty"`
	Gender         *GenderEnum    `json:"gender,omitempty"`
	AddedUrls      []*URL         `json:"added_urls,omitempty"`
	RemovedUrls    []*URL         `json:"removed_urls,omitempty"`
	Birthdate      *string        `json:"birthdate,omitempty"`
	Deathdate      *string        `json:"deathdate,omitempty"`
	Ethnicity      *EthnicityEnum `json:"ethnicity,omitempty"`
	Country        *string        `json:"country,omitempty"`
	EyeColor       *EyeColorEnum  `json:"eye_color,omitempty"`
	HairColor      *HairColorEnum `json:"hair_color,omitempty"`
	// Height in cm
	Height           *int                `json:"height,omitempty"`
	CupSize          *string             `json:"cup_size,omitempty"`
	BandSize         *int                `json:"band_size,omitempty"`
	WaistSize        *int                `json:"waist_size,omitempty"`
	HipSize          *int                `json:"hip_size,omitempty"`
	BreastType       *BreastTypeEnum     `json:"breast_type,omitempty"`
	CareerStartYear  *int                `json:"career_start_year,omitempty"`
	CareerEndYear    *int                `json:"career_end_year,omitempty"`
	AddedTattoos     []*BodyModification `json:"added_tattoos,omitempty"`
	RemovedTattoos   []*BodyModification `json:"removed_tattoos,omitempty"`
	AddedPiercings   []*BodyModification `json:"added_piercings,omitempty"`
	RemovedPiercings []*BodyModification `json:"removed_piercings,omitempty"`
	AddedImages      []*Image            `json:"added_images,omitempty"`
	RemovedImages    []*Image            `json:"removed_images,omitempty"`
	DraftID          *string             `json:"draft_id,omitempty"`
	Aliases          []string            `json:"aliases"`
	Urls             []*URL              `json:"urls"`
	Images           []*Image            `json:"images"`
	Tattoos          []*BodyModification `json:"tattoos"`
	Piercings        []*BodyModification `json:"piercings"`
}

func (PerformerEdit) IsEditDetails() {}

type PerformerEditDetailsInput struct {
	Name            *string                  `json:"name,omitempty"`
	Disambiguation  *string                  `json:"disambiguation,omitempty"`
	Aliases         []string                 `json:"aliases,omitempty"`
	Gender          *GenderEnum              `json:"gender,omitempty"`
	Urls            []*URLInput              `json:"urls,omitempty"`
	Birthdate       *string                  `json:"birthdate,omitempty"`
	Deathdate       *string                  `json:"deathdate,omitempty"`
	Ethnicity       *EthnicityEnum           `json:"ethnicity,omitempty"`
	Country         *string                  `json:"country,omitempty"`
	EyeColor        *EyeColorEnum            `json:"eye_color,omitempty"`
	HairColor       *HairColorEnum           `json:"hair_color,omitempty"`
	Height          *int                     `json:"height,omitempty"`
	CupSize         *string                  `json:"cup_size,omitempty"`
	BandSize        *int                     `json:"band_size,omitempty"`
	WaistSize       *int                     `json:"waist_size,omitempty"`
	HipSize         *int                     `json:"hip_size,omitempty"`
	BreastType      *BreastTypeEnum          `json:"breast_type,omitempty"`
	CareerStartYear *int                     `json:"career_start_year,omitempty"`
	CareerEndYear   *int                     `json:"career_end_year,omitempty"`
	Tattoos         []*BodyModificationInput `json:"tattoos,omitempty"`
	Piercings       []*BodyModificationInput `json:"piercings,omitempty"`
	ImageIds        []string                 `json:"image_ids,omitempty"`
	DraftID         *string                  `json:"draft_id,omitempty"`
}

type PerformerEditInput struct {
	Edit *EditInput `json:"edit"`
	// Not required for destroy type
	Details *PerformerEditDetailsInput `json:"details,omitempty"`
	// Controls aliases modification for merges and name modifications
	Options *PerformerEditOptionsInput `json:"options,omitempty"`
}

type PerformerEditOptions struct {
	// Set performer alias on scenes without alias to old name if name is changed
	SetModifyAliases bool `json:"set_modify_aliases"`
	// Set performer alias on scenes attached to merge sources to old name
	SetMergeAliases bool `json:"set_merge_aliases"`
}

type PerformerEditOptionsInput struct {
	// Set performer alias on scenes without alias to old name if name is changed
	SetModifyAliases *bool `json:"set_modify_aliases,omitempty"`
	// Set performer alias on scenes attached to merge sources to old name
	SetMergeAliases *bool `json:"set_merge_aliases,omitempty"`
}

type PerformerQueryInput struct {
	// Searches name and disambiguation - assumes like query unless quoted
	Names *string `json:"names,omitempty"`
	// Searches name only - assumes like query unless quoted
	Name *string `json:"name,omitempty"`
	// Search aliases only - assumes like query unless quoted
	Alias          *string               `json:"alias,omitempty"`
	Disambiguation *StringCriterionInput `json:"disambiguation,omitempty"`
	Gender         *GenderFilterEnum     `json:"gender,omitempty"`
	// Filter to search urls - assumes like query unless quoted
	URL             *string                         `json:"url,omitempty"`
	Birthdate       *DateCriterionInput             `json:"birthdate,omitempty"`
	Deathdate       *DateCriterionInput             `json:"deathdate,omitempty"`
	BirthYear       *IntCriterionInput              `json:"birth_year,omitempty"`
	Age             *IntCriterionInput              `json:"age,omitempty"`
	Ethnicity       *EthnicityFilterEnum            `json:"ethnicity,omitempty"`
	Country         *StringCriterionInput           `json:"country,omitempty"`
	EyeColor        *EyeColorCriterionInput         `json:"eye_color,omitempty"`
	HairColor       *HairColorCriterionInput        `json:"hair_color,omitempty"`
	Height          *IntCriterionInput              `json:"height,omitempty"`
	CupSize         *StringCriterionInput           `json:"cup_size,omitempty"`
	BandSize        *IntCriterionInput              `json:"band_size,omitempty"`
	WaistSize       *IntCriterionInput              `json:"waist_size,omitempty"`
	HipSize         *IntCriterionInput              `json:"hip_size,omitempty"`
	BreastType      *BreastTypeCriterionInput       `json:"breast_type,omitempty"`
	CareerStartYear *IntCriterionInput              `json:"career_start_year,omitempty"`
	CareerEndYear   *IntCriterionInput              `json:"career_end_year,omitempty"`
	Tattoos         *BodyModificationCriterionInput `json:"tattoos,omitempty"`
	Piercings       *BodyModificationCriterionInput `json:"piercings,omitempty"`
	// Filter by performerfavorite status for the current user
	IsFavorite *bool `json:"is_favorite,omitempty"`
	// Filter by a performer they have performed in scenes with
	PerformedWith *string `json:"performed_with,omitempty"`
	// Filter by a studio
	StudioID  *string           `json:"studio_id,omitempty"`
	Page      int               `json:"page"`
	PerPage   int               `json:"per_page"`
	Direction SortDirectionEnum `json:"direction"`
	Sort      PerformerSortEnum `json:"sort"`
}

type PerformerScenesInput struct {
	// Filter by another performer that also performs in the scenes
	PerformedWith *string `json:"performed_with,omitempty"`
	// Filter by a studio
	StudioID *string `json:"studio_id,omitempty"`
	// Filter by tags
	Tags *MultiIDCriterionInput `json:"tags,omitempty"`
}

type PerformerStudio struct {
	Studio     *Studio `json:"studio"`
	SceneCount int     `json:"scene_count"`
}

type PerformerUpdateInput struct {
	ID              string                   `json:"id"`
	Name            *string                  `json:"name,omitempty"`
	Disambiguation  *string                  `json:"disambiguation,omitempty"`
	Aliases         []string                 `json:"aliases,omitempty"`
	Gender          *GenderEnum              `json:"gender,omitempty"`
	Urls            []*URLInput              `json:"urls,omitempty"`
	Birthdate       *string                  `json:"birthdate,omitempty"`
	Deathdate       *string                  `json:"deathdate,omitempty"`
	Ethnicity       *EthnicityEnum           `json:"ethnicity,omitempty"`
	Country         *string                  `json:"country,omitempty"`
	EyeColor        *EyeColorEnum            `json:"eye_color,omitempty"`
	HairColor       *HairColorEnum           `json:"hair_color,omitempty"`
	Height          *int                     `json:"height,omitempty"`
	CupSize         *string                  `json:"cup_size,omitempty"`
	BandSize        *int                     `json:"band_size,omitempty"`
	WaistSize       *int                     `json:"waist_size,omitempty"`
	HipSize         *int                     `json:"hip_size,omitempty"`
	BreastType      *BreastTypeEnum          `json:"breast_type,omitempty"`
	CareerStartYear *int                     `json:"career_start_year,omitempty"`
	CareerEndYear   *int                     `json:"career_end_year,omitempty"`
	Tattoos         []*BodyModificationInput `json:"tattoos,omitempty"`
	Piercings       []*BodyModificationInput `json:"piercings,omitempty"`
	ImageIds        []string                 `json:"image_ids,omitempty"`
}

// The query root for this schema
type Query struct {
}

type QueryEditsResultType struct {
	Count int     `json:"count"`
	Edits []*Edit `json:"edits"`
}

type QueryExistingPerformerInput struct {
	Name           *string  `json:"name,omitempty"`
	Disambiguation *string  `json:"disambiguation,omitempty"`
	Urls           []string `json:"urls"`
}

type QueryExistingPerformerResult struct {
	Edits      []*Edit      `json:"edits"`
	Performers []*Performer `json:"performers"`
}

type QueryExistingSceneInput struct {
	Title        *string             `json:"title,omitempty"`
	StudioID     *string             `json:"studio_id,omitempty"`
	Fingerprints []*FingerprintInput `json:"fingerprints"`
}

type QueryExistingSceneResult struct {
	Edits  []*Edit  `json:"edits"`
	Scenes []*Scene `json:"scenes"`
}

type QueryNotificationsInput struct {
	Page       int               `json:"page"`
	PerPage    int               `json:"per_page"`
	Type       *NotificationEnum `json:"type,omitempty"`
	UnreadOnly *bool             `json:"unread_only,omitempty"`
}

type QueryNotificationsResult struct {
	Count         int             `json:"count"`
	Notifications []*Notification `json:"notifications"`
}

type QueryPerformersResultType struct {
	Count      int          `json:"count"`
	Performers []*Performer `json:"performers"`
}

type QueryScenesResultType struct {
	Count  int      `json:"count"`
	Scenes []*Scene `json:"scenes"`
}

type QuerySitesResultType struct {
	Count int     `json:"count"`
	Sites []*Site `json:"sites"`
}

type QueryStudiosResultType struct {
	Count   int       `json:"count"`
	Studios []*Studio `json:"studios"`
}

type QueryTagCategoriesResultType struct {
	Count         int            `json:"count"`
	TagCategories []*TagCategory `json:"tag_categories"`
}

type QueryTagsResultType struct {
	Count int    `json:"count"`
	Tags  []*Tag `json:"tags"`
}

type QueryUsersResultType struct {
	Count int     `json:"count"`
	Users []*User `json:"users"`
}

type ResetPasswordInput struct {
	Email string `json:"email"`
}

type RevokeInviteInput struct {
	UserID string `json:"user_id"`
	Amount int    `json:"amount"`
}

type RoleCriterionInput struct {
	Value    []RoleEnum        `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type Scene struct {
	ID             string                 `json:"id"`
	Title          *string                `json:"title,omitempty"`
	Details        *string                `json:"details,omitempty"`
	Date           *string                `json:"date,omitempty"`
	ReleaseDate    *string                `json:"release_date,omitempty"`
	ProductionDate *string                `json:"production_date,omitempty"`
	Urls           []*URL                 `json:"urls"`
	Studio         *Studio                `json:"studio,omitempty"`
	Tags           []*Tag                 `json:"tags"`
	Images         []*Image               `json:"images"`
	Performers     []*PerformerAppearance `json:"performers"`
	Fingerprints   []*Fingerprint         `json:"fingerprints"`
	Duration       *int                   `json:"duration,omitempty"`
	Director       *string                `json:"director,omitempty"`
	Code           *string                `json:"code,omitempty"`
	Deleted        bool                   `json:"deleted"`
	Edits          []*Edit                `json:"edits"`
	Created        time.Time              `json:"created"`
	Updated        time.Time              `json:"updated"`
}

func (Scene) IsEditTarget() {}

type SceneCreateInput struct {
	Title          *string                     `json:"title,omitempty"`
	Details        *string                     `json:"details,omitempty"`
	Urls           []*URLInput                 `json:"urls,omitempty"`
	Date           string                      `json:"date"`
	ProductionDate *string                     `json:"production_date,omitempty"`
	StudioID       *string                     `json:"studio_id,omitempty"`
	Performers     []*PerformerAppearanceInput `json:"performers,omitempty"`
	TagIds         []string                    `json:"tag_ids,omitempty"`
	ImageIds       []string                    `json:"image_ids,omitempty"`
	Fingerprints   []*FingerprintEditInput     `json:"fingerprints"`
	Duration       *int                        `json:"duration,omitempty"`
	Director       *string                     `json:"director,omitempty"`
	Code           *string                     `json:"code,omitempty"`
}

type SceneDestroyInput struct {
	ID string `json:"id"`
}

type SceneDraft struct {
	ID             *string               `json:"id,omitempty"`
	Title          *string               `json:"title,omitempty"`
	Code           *string               `json:"code,omitempty"`
	Details        *string               `json:"details,omitempty"`
	Director       *string               `json:"director,omitempty"`
	Urls           []string              `json:"urls,omitempty"`
	Date           *string               `json:"date,omitempty"`
	ProductionDate *string               `json:"production_date,omitempty"`
	Studio         SceneDraftStudio      `json:"studio,omitempty"`
	Performers     []SceneDraftPerformer `json:"performers"`
	Tags           []SceneDraftTag       `json:"tags,omitempty"`
	Image          *Image                `json:"image,omitempty"`
	Fingerprints   []*DraftFingerprint   `json:"fingerprints"`
}

func (SceneDraft) IsDraftData() {}

type SceneDraftInput struct {
	ID             *string             `json:"id,omitempty"`
	Title          *string             `json:"title,omitempty"`
	Code           *string             `json:"code,omitempty"`
	Details        *string             `json:"details,omitempty"`
	Director       *string             `json:"director,omitempty"`
	URL            *string             `json:"url,omitempty"`
	Urls           []string            `json:"urls,omitempty"`
	Date           *string             `json:"date,omitempty"`
	ProductionDate *string             `json:"production_date,omitempty"`
	Studio         *DraftEntityInput   `json:"studio,omitempty"`
	Performers     []*DraftEntityInput `json:"performers"`
	Tags           []*DraftEntityInput `json:"tags,omitempty"`
	Image          *graphql.Upload     `json:"image,omitempty"`
	Fingerprints   []*FingerprintInput `json:"fingerprints"`
}

type SceneEdit struct {
	Title          *string `json:"title,omitempty"`
	Details        *string `json:"details,omitempty"`
	AddedUrls      []*URL  `json:"added_urls,omitempty"`
	RemovedUrls    []*URL  `json:"removed_urls,omitempty"`
	Date           *string `json:"date,omitempty"`
	ProductionDate *string `json:"production_date,omitempty"`
	Studio         *Studio `json:"studio,omitempty"`
	// Added or modified performer appearance entries
	AddedPerformers     []*PerformerAppearance `json:"added_performers,omitempty"`
	RemovedPerformers   []*PerformerAppearance `json:"removed_performers,omitempty"`
	AddedTags           []*Tag                 `json:"added_tags,omitempty"`
	RemovedTags         []*Tag                 `json:"removed_tags,omitempty"`
	AddedImages         []*Image               `json:"added_images,omitempty"`
	RemovedImages       []*Image               `json:"removed_images,omitempty"`
	AddedFingerprints   []*Fingerprint         `json:"added_fingerprints,omitempty"`
	RemovedFingerprints []*Fingerprint         `json:"removed_fingerprints,omitempty"`
	Duration            *int                   `json:"duration,omitempty"`
	Director            *string                `json:"director,omitempty"`
	Code                *string                `json:"code,omitempty"`
	DraftID             *string                `json:"draft_id,omitempty"`
	Urls                []*URL                 `json:"urls"`
	Performers          []*PerformerAppearance `json:"performers"`
	Tags                []*Tag                 `json:"tags"`
	Images              []*Image               `json:"images"`
	Fingerprints        []*Fingerprint         `json:"fingerprints"`
}

func (SceneEdit) IsEditDetails() {}

type SceneEditDetailsInput struct {
	Title          *string                     `json:"title,omitempty"`
	Details        *string                     `json:"details,omitempty"`
	Urls           []*URLInput                 `json:"urls,omitempty"`
	Date           *string                     `json:"date,omitempty"`
	ProductionDate *string                     `json:"production_date,omitempty"`
	StudioID       *string                     `json:"studio_id,omitempty"`
	Performers     []*PerformerAppearanceInput `json:"performers,omitempty"`
	TagIds         []string                    `json:"tag_ids,omitempty"`
	ImageIds       []string                    `json:"image_ids,omitempty"`
	Duration       *int                        `json:"duration,omitempty"`
	Director       *string                     `json:"director,omitempty"`
	Code           *string                     `json:"code,omitempty"`
	Fingerprints   []*FingerprintInput         `json:"fingerprints,omitempty"`
	DraftID        *string                     `json:"draft_id,omitempty"`
}

type SceneEditInput struct {
	Edit *EditInput `json:"edit"`
	// Not required for destroy type
	Details *SceneEditDetailsInput `json:"details,omitempty"`
}

type SceneQueryInput struct {
	// Filter to search title and details - assumes like query unless quoted
	Text *string `json:"text,omitempty"`
	// Filter to search title - assumes like query unless quoted
	Title *string `json:"title,omitempty"`
	// Filter to search urls - assumes like query unless quoted
	URL *string `json:"url,omitempty"`
	// Filter by date
	Date *DateCriterionInput `json:"date,omitempty"`
	// Filter by production date
	ProductionDate *DateCriterionInput `json:"production_date,omitempty"`
	// Filter to only include scenes with this studio
	Studios *MultiIDCriterionInput `json:"studios,omitempty"`
	// Filter to only include scenes with this studio as primary or parent
	ParentStudio *string `json:"parentStudio,omitempty"`
	// Filter to only include scenes with these tags
	Tags *MultiIDCriterionInput `json:"tags,omitempty"`
	// Filter to only include scenes with these performers
	Performers *MultiIDCriterionInput `json:"performers,omitempty"`
	// Filter to include scenes with performer appearing as alias
	Alias *StringCriterionInput `json:"alias,omitempty"`
	// Filter to only include scenes with these fingerprints
	Fingerprints *MultiStringCriterionInput `json:"fingerprints,omitempty"`
	// Filter by favorited entity
	Favorites *FavoriteFilter `json:"favorites,omitempty"`
	// Filter to scenes with fingerprints submitted by the user
	HasFingerprintSubmissions *bool             `json:"has_fingerprint_submissions,omitempty"`
	Page                      int               `json:"page"`
	PerPage                   int               `json:"per_page"`
	Direction                 SortDirectionEnum `json:"direction"`
	Sort                      SceneSortEnum     `json:"sort"`
}

type SceneUpdateInput struct {
	ID             string                      `json:"id"`
	Title          *string                     `json:"title,omitempty"`
	Details        *string                     `json:"details,omitempty"`
	Urls           []*URLInput                 `json:"urls,omitempty"`
	Date           *string                     `json:"date,omitempty"`
	ProductionDate *string                     `json:"production_date,omitempty"`
	StudioID       *string                     `json:"studio_id,omitempty"`
	Performers     []*PerformerAppearanceInput `json:"performers,omitempty"`
	TagIds         []string                    `json:"tag_ids,omitempty"`
	ImageIds       []string                    `json:"image_ids,omitempty"`
	Fingerprints   []*FingerprintEditInput     `json:"fingerprints,omitempty"`
	Duration       *int                        `json:"duration,omitempty"`
	Director       *string                     `json:"director,omitempty"`
	Code           *string                     `json:"code,omitempty"`
}

type Site struct {
	ID          string              `json:"id"`
	Name        string              `json:"name"`
	Description *string             `json:"description,omitempty"`
	URL         *string             `json:"url,omitempty"`
	Regex       *string             `json:"regex,omitempty"`
	ValidTypes  []ValidSiteTypeEnum `json:"valid_types"`
	Icon        string              `json:"icon"`
	Created     time.Time           `json:"created"`
	Updated     time.Time           `json:"updated"`
}

type SiteCreateInput struct {
	Name        string              `json:"name"`
	Description *string             `json:"description,omitempty"`
	URL         *string             `json:"url,omitempty"`
	Regex       *string             `json:"regex,omitempty"`
	ValidTypes  []ValidSiteTypeEnum `json:"valid_types"`
}

type SiteDestroyInput struct {
	ID string `json:"id"`
}

type SiteUpdateInput struct {
	ID          string              `json:"id"`
	Name        string              `json:"name"`
	Description *string             `json:"description,omitempty"`
	URL         *string             `json:"url,omitempty"`
	Regex       *string             `json:"regex,omitempty"`
	ValidTypes  []ValidSiteTypeEnum `json:"valid_types"`
}

type StashBoxConfig struct {
	HostURL                    string `json:"host_url"`
	RequireInvite              bool   `json:"require_invite"`
	RequireActivation          bool   `json:"require_activation"`
	VotePromotionThreshold     *int   `json:"vote_promotion_threshold,omitempty"`
	VoteApplicationThreshold   int    `json:"vote_application_threshold"`
	VotingPeriod               int    `json:"voting_period"`
	MinDestructiveVotingPeriod int    `json:"min_destructive_voting_period"`
	VoteCronInterval           string `json:"vote_cron_interval"`
	GuidelinesURL              string `json:"guidelines_url"`
	RequireSceneDraft          bool   `json:"require_scene_draft"`
	EditUpdateLimit            int    `json:"edit_update_limit"`
	RequireTagRole             bool   `json:"require_tag_role"`
}

type StringCriterionInput struct {
	Value    string            `json:"value"`
	Modifier CriterionModifier `json:"modifier"`
}

type Studio struct {
	ID           string                     `json:"id"`
	Name         string                     `json:"name"`
	Aliases      []string                   `json:"aliases"`
	Urls         []*URL                     `json:"urls"`
	Parent       *Studio                    `json:"parent,omitempty"`
	ChildStudios []*Studio                  `json:"child_studios"`
	Images       []*Image                   `json:"images"`
	Deleted      bool                       `json:"deleted"`
	IsFavorite   bool                       `json:"is_favorite"`
	Created      time.Time                  `json:"created"`
	Updated      time.Time                  `json:"updated"`
	Performers   *QueryPerformersResultType `json:"performers"`
}

func (Studio) IsEditTarget() {}

func (Studio) IsSceneDraftStudio() {}

type StudioCreateInput struct {
	Name     string      `json:"name"`
	Aliases  []string    `json:"aliases,omitempty"`
	Urls     []*URLInput `json:"urls,omitempty"`
	ParentID *string     `json:"parent_id,omitempty"`
	ImageIds []string    `json:"image_ids,omitempty"`
}

type StudioDestroyInput struct {
	ID string `json:"id"`
}

type StudioEdit struct {
	Name *string `json:"name,omitempty"`
	// Added and modified URLs
	AddedUrls      []*URL   `json:"added_urls,omitempty"`
	RemovedUrls    []*URL   `json:"removed_urls,omitempty"`
	Parent         *Studio  `json:"parent,omitempty"`
	AddedImages    []*Image `json:"added_images,omitempty"`
	RemovedImages  []*Image `json:"removed_images,omitempty"`
	AddedAliases   []string `json:"added_aliases,omitempty"`
	RemovedAliases []string `json:"removed_aliases,omitempty"`
	Images         []*Image `json:"images"`
	Urls           []*URL   `json:"urls"`
}

func (StudioEdit) IsEditDetails() {}

type StudioEditDetailsInput struct {
	Name     *string     `json:"name,omitempty"`
	Aliases  []string    `json:"aliases,omitempty"`
	Urls     []*URLInput `json:"urls,omitempty"`
	ParentID *string     `json:"parent_id,omitempty"`
	ImageIds []string    `json:"image_ids,omitempty"`
}

type StudioEditInput struct {
	Edit *EditInput `json:"edit"`
	// Not required for destroy type
	Details *StudioEditDetailsInput `json:"details,omitempty"`
}

type StudioQueryInput struct {
	// Filter to search name - assumes like query unless quoted
	Name *string `json:"name,omitempty"`
	// Filter to search studio name, aliases and parent studio name - assumes like query unless quoted
	Names *string `json:"names,omitempty"`
	// Filter to search url - assumes like query unless quoted
	URL       *string           `json:"url,omitempty"`
	Parent    *IDCriterionInput `json:"parent,omitempty"`
	HasParent *bool             `json:"has_parent,omitempty"`
	// Filter by studio favorite status for the current user
	IsFavorite *bool             `json:"is_favorite,omitempty"`
	Page       int               `json:"page"`
	PerPage    int               `json:"per_page"`
	Direction  SortDirectionEnum `json:"direction"`
	Sort       StudioSortEnum    `json:"sort"`
}

type StudioUpdateInput struct {
	ID       string      `json:"id"`
	Name     *string     `json:"name,omitempty"`
	Aliases  []string    `json:"aliases,omitempty"`
	Urls     []*URLInput `json:"urls,omitempty"`
	ParentID *string     `json:"parent_id,omitempty"`
	ImageIds []string    `json:"image_ids,omitempty"`
}

type Tag struct {
	ID          string       `json:"id"`
	Name        string       `json:"name"`
	Description *string      `json:"description,omitempty"`
	Aliases     []string     `json:"aliases"`
	Deleted     bool         `json:"deleted"`
	Edits       []*Edit      `json:"edits"`
	Category    *TagCategory `json:"category,omitempty"`
	Created     time.Time    `json:"created"`
	Updated     time.Time    `json:"updated"`
}

func (Tag) IsEditTarget() {}

func (Tag) IsSceneDraftTag() {}

type TagCategory struct {
	ID          string       `json:"id"`
	Name        string       `json:"name"`
	Group       TagGroupEnum `json:"group"`
	Description *string      `json:"description,omitempty"`
}

type TagCategoryCreateInput struct {
	Name        string       `json:"name"`
	Group       TagGroupEnum `json:"group"`
	Description *string      `json:"description,omitempty"`
}

type TagCategoryDestroyInput struct {
	ID string `json:"id"`
}

type TagCategoryUpdateInput struct {
	ID          string        `json:"id"`
	Name        *string       `json:"name,omitempty"`
	Group       *TagGroupEnum `json:"group,omitempty"`
	Description *string       `json:"description,omitempty"`
}

type TagCreateInput struct {
	Name        string   `json:"name"`
	Description *string  `json:"description,omitempty"`
	Aliases     []string `json:"aliases,omitempty"`
	CategoryID  *string  `json:"category_id,omitempty"`
}

type TagDestroyInput struct {
	ID string `json:"id"`
}

type TagEdit struct {
	Name           *string      `json:"name,omitempty"`
	Description    *string      `json:"description,omitempty"`
	AddedAliases   []string     `json:"added_aliases,omitempty"`
	RemovedAliases []string     `json:"removed_aliases,omitempty"`
	Category       *TagCategory `json:"category,omitempty"`
	Aliases        []string     `json:"aliases"`
}

func (TagEdit) IsEditDetails() {}

type TagEditDetailsInput struct {
	Name        *string  `json:"name,omitempty"`
	Description *string  `json:"description,omitempty"`
	Aliases     []string `json:"aliases,omitempty"`
	CategoryID  *string  `json:"category_id,omitempty"`
}

type TagEditInput struct {
	Edit *EditInput `json:"edit"`
	// Not required for destroy type
	Details *TagEditDetailsInput `json:"details,omitempty"`
}

type TagQueryInput struct {
	// Filter to search name, aliases and description - assumes like query unless quoted
	Text *string `json:"text,omitempty"`
	// Searches name and aliases - assumes like query unless quoted
	Names *string `json:"names,omitempty"`
	// Filter to search name - assumes like query unless quoted
	Name *string `json:"name,omitempty"`
	// Filter to category ID
	CategoryID *string           `json:"category_id,omitempty"`
	Page       int               `json:"page"`
	PerPage    int               `json:"per_page"`
	Direction  SortDirectionEnum `json:"direction"`
	Sort       TagSortEnum       `json:"sort"`
}

type TagUpdateInput struct {
	ID          string   `json:"id"`
	Name        *string  `json:"name,omitempty"`
	Description *string  `json:"description,omitempty"`
	Aliases     []string `json:"aliases,omitempty"`
	CategoryID  *string  `json:"category_id,omitempty"`
}

type URL struct {
	URL  string `json:"url"`
	Type string `json:"type"`
	Site *Site  `json:"site"`
}

type URLInput struct {
	URL    string `json:"url"`
	SiteID string `json:"site_id"`
}

type UpdatedEdit struct {
	Edit *Edit `json:"edit"`
}

func (UpdatedEdit) IsNotificationData() {}

type User struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	// Should not be visible to other users
	Roles []RoleEnum `json:"roles,omitempty"`
	// Should not be visible to other users
	Email *string `json:"email,omitempty"`
	// Should not be visible to other users
	APIKey                    *string            `json:"api_key,omitempty"`
	NotificationSubscriptions []NotificationEnum `json:"notification_subscriptions"`
	//  Vote counts by type
	VoteCount *UserVoteCount `json:"vote_count"`
	//  Edit counts by status
	EditCount *UserEditCount `json:"edit_count"`
	// Calls to the API from this user over a configurable time period
	APICalls          int          `json:"api_calls"`
	InvitedBy         *User        `json:"invited_by,omitempty"`
	InviteTokens      *int         `json:"invite_tokens,omitempty"`
	ActiveInviteCodes []string     `json:"active_invite_codes,omitempty"`
	InviteCodes       []*InviteKey `json:"invite_codes,omitempty"`
}

type UserChangeEmailInput struct {
	ExistingEmailToken *string `json:"existing_email_token,omitempty"`
	NewEmailToken      *string `json:"new_email_token,omitempty"`
	NewEmail           *string `json:"new_email,omitempty"`
}

type UserChangePasswordInput struct {
	// Password in plain text
	ExistingPassword *string `json:"existing_password,omitempty"`
	NewPassword      string  `json:"new_password"`
	ResetKey         *string `json:"reset_key,omitempty"`
}

type UserCreateInput struct {
	Name string `json:"name"`
	// Password in plain text
	Password    string     `json:"password"`
	Roles       []RoleEnum `json:"roles"`
	Email       string     `json:"email"`
	InvitedByID *string    `json:"invited_by_id,omitempty"`
}

type UserDestroyInput struct {
	ID string `json:"id"`
}

type UserEditCount struct {
	Accepted          int `json:"accepted"`
	Rejected          int `json:"rejected"`
	Pending           int `json:"pending"`
	ImmediateAccepted int `json:"immediate_accepted"`
	ImmediateRejected int `json:"immediate_rejected"`
	Failed            int `json:"failed"`
	Canceled          int `json:"canceled"`
}

type UserQueryInput struct {
	// Filter to search user name - assumes like query unless quoted
	Name *string `json:"name,omitempty"`
	// Filter to search email - assumes like query unless quoted
	Email *string `json:"email,omitempty"`
	// Filter by roles
	Roles *RoleCriterionInput `json:"roles,omitempty"`
	// Filter by api key
	APIKey *string `json:"apiKey,omitempty"`
	// Filter by successful edits
	SuccessfulEdits *IntCriterionInput `json:"successful_edits,omitempty"`
	// Filter by unsuccessful edits
	UnsuccessfulEdits *IntCriterionInput `json:"unsuccessful_edits,omitempty"`
	// Filter by votes on successful edits
	SuccessfulVotes *IntCriterionInput `json:"successful_votes,omitempty"`
	// Filter by votes on unsuccessful edits
	UnsuccessfulVotes *IntCriterionInput `json:"unsuccessful_votes,omitempty"`
	// Filter by number of API calls
	APICalls *IntCriterionInput `json:"api_calls,omitempty"`
	// Filter by user that invited
	InvitedBy *string `json:"invited_by,omitempty"`
	Page      int     `json:"page"`
	PerPage   int     `json:"per_page"`
}

type UserUpdateInput struct {
	ID   string  `json:"id"`
	Name *string `json:"name,omitempty"`
	// Password in plain text
	Password *string    `json:"password,omitempty"`
	Roles    []RoleEnum `json:"roles,omitempty"`
	Email    *string    `json:"email,omitempty"`
}

type UserVoteCount struct {
	Abstain         int `json:"abstain"`
	Accept          int `json:"accept"`
	Reject          int `json:"reject"`
	ImmediateAccept int `json:"immediate_accept"`
	ImmediateReject int `json:"immediate_reject"`
}

type Version struct {
	Hash      string `json:"hash"`
	BuildTime string `json:"build_time"`
	BuildType string `json:"build_type"`
	Version   string `json:"version"`
}

type BreastTypeEnum string

const (
	BreastTypeEnumNatural BreastTypeEnum = "NATURAL"
	BreastTypeEnumFake    BreastTypeEnum = "FAKE"
	BreastTypeEnumNa      BreastTypeEnum = "NA"
)

var AllBreastTypeEnum = []BreastTypeEnum{
	BreastTypeEnumNatural,
	BreastTypeEnumFake,
	BreastTypeEnumNa,
}

func (e BreastTypeEnum) IsValid() bool {
	switch e {
	case BreastTypeEnumNatural, BreastTypeEnumFake, BreastTypeEnumNa:
		return true
	}
	return false
}

func (e BreastTypeEnum) String() string {
	return string(e)
}

func (e *BreastTypeEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = BreastTypeEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid BreastTypeEnum", str)
	}
	return nil
}

func (e BreastTypeEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *BreastTypeEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e BreastTypeEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type CriterionModifier string

const (
	// =
	CriterionModifierEquals CriterionModifier = "EQUALS"
	// !=
	CriterionModifierNotEquals CriterionModifier = "NOT_EQUALS"
	// >
	CriterionModifierGreaterThan CriterionModifier = "GREATER_THAN"
	// <
	CriterionModifierLessThan CriterionModifier = "LESS_THAN"
	// IS NULL
	CriterionModifierIsNull CriterionModifier = "IS_NULL"
	// IS NOT NULL
	CriterionModifierNotNull CriterionModifier = "NOT_NULL"
	// INCLUDES ALL
	CriterionModifierIncludesAll CriterionModifier = "INCLUDES_ALL"
	CriterionModifierIncludes    CriterionModifier = "INCLUDES"
	CriterionModifierExcludes    CriterionModifier = "EXCLUDES"
)

var AllCriterionModifier = []CriterionModifier{
	CriterionModifierEquals,
	CriterionModifierNotEquals,
	CriterionModifierGreaterThan,
	CriterionModifierLessThan,
	CriterionModifierIsNull,
	CriterionModifierNotNull,
	CriterionModifierIncludesAll,
	CriterionModifierIncludes,
	CriterionModifierExcludes,
}

func (e CriterionModifier) IsValid() bool {
	switch e {
	case CriterionModifierEquals, CriterionModifierNotEquals, CriterionModifierGreaterThan, CriterionModifierLessThan, CriterionModifierIsNull, CriterionModifierNotNull, CriterionModifierIncludesAll, CriterionModifierIncludes, CriterionModifierExcludes:
		return true
	}
	return false
}

func (e CriterionModifier) String() string {
	return string(e)
}

func (e *CriterionModifier) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = CriterionModifier(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid CriterionModifier", str)
	}
	return nil
}

func (e CriterionModifier) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *CriterionModifier) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e CriterionModifier) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type DateAccuracyEnum string

const (
	DateAccuracyEnumYear  DateAccuracyEnum = "YEAR"
	DateAccuracyEnumMonth DateAccuracyEnum = "MONTH"
	DateAccuracyEnumDay   DateAccuracyEnum = "DAY"
)

var AllDateAccuracyEnum = []DateAccuracyEnum{
	DateAccuracyEnumYear,
	DateAccuracyEnumMonth,
	DateAccuracyEnumDay,
}

func (e DateAccuracyEnum) IsValid() bool {
	switch e {
	case DateAccuracyEnumYear, DateAccuracyEnumMonth, DateAccuracyEnumDay:
		return true
	}
	return false
}

func (e DateAccuracyEnum) String() string {
	return string(e)
}

func (e *DateAccuracyEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = DateAccuracyEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid DateAccuracyEnum", str)
	}
	return nil
}

func (e DateAccuracyEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *DateAccuracyEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e DateAccuracyEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type EditSortEnum string

const (
	EditSortEnumCreatedAt EditSortEnum = "CREATED_AT"
	EditSortEnumUpdatedAt EditSortEnum = "UPDATED_AT"
	EditSortEnumClosedAt  EditSortEnum = "CLOSED_AT"
)

var AllEditSortEnum = []EditSortEnum{
	EditSortEnumCreatedAt,
	EditSortEnumUpdatedAt,
	EditSortEnumClosedAt,
}

func (e EditSortEnum) IsValid() bool {
	switch e {
	case EditSortEnumCreatedAt, EditSortEnumUpdatedAt, EditSortEnumClosedAt:
		return true
	}
	return false
}

func (e EditSortEnum) String() string {
	return string(e)
}

func (e *EditSortEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = EditSortEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid EditSortEnum", str)
	}
	return nil
}

func (e EditSortEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *EditSortEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e EditSortEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type EthnicityEnum string

const (
	EthnicityEnumCaucasian     EthnicityEnum = "CAUCASIAN"
	EthnicityEnumBlack         EthnicityEnum = "BLACK"
	EthnicityEnumAsian         EthnicityEnum = "ASIAN"
	EthnicityEnumIndian        EthnicityEnum = "INDIAN"
	EthnicityEnumLatin         EthnicityEnum = "LATIN"
	EthnicityEnumMiddleEastern EthnicityEnum = "MIDDLE_EASTERN"
	EthnicityEnumMixed         EthnicityEnum = "MIXED"
	EthnicityEnumOther         EthnicityEnum = "OTHER"
)

var AllEthnicityEnum = []EthnicityEnum{
	EthnicityEnumCaucasian,
	EthnicityEnumBlack,
	EthnicityEnumAsian,
	EthnicityEnumIndian,
	EthnicityEnumLatin,
	EthnicityEnumMiddleEastern,
	EthnicityEnumMixed,
	EthnicityEnumOther,
}

func (e EthnicityEnum) IsValid() bool {
	switch e {
	case EthnicityEnumCaucasian, EthnicityEnumBlack, EthnicityEnumAsian, EthnicityEnumIndian, EthnicityEnumLatin, EthnicityEnumMiddleEastern, EthnicityEnumMixed, EthnicityEnumOther:
		return true
	}
	return false
}

func (e EthnicityEnum) String() string {
	return string(e)
}

func (e *EthnicityEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = EthnicityEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid EthnicityEnum", str)
	}
	return nil
}

func (e EthnicityEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *EthnicityEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e EthnicityEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type EthnicityFilterEnum string

const (
	EthnicityFilterEnumUnknown       EthnicityFilterEnum = "UNKNOWN"
	EthnicityFilterEnumCaucasian     EthnicityFilterEnum = "CAUCASIAN"
	EthnicityFilterEnumBlack         EthnicityFilterEnum = "BLACK"
	EthnicityFilterEnumAsian         EthnicityFilterEnum = "ASIAN"
	EthnicityFilterEnumIndian        EthnicityFilterEnum = "INDIAN"
	EthnicityFilterEnumLatin         EthnicityFilterEnum = "LATIN"
	EthnicityFilterEnumMiddleEastern EthnicityFilterEnum = "MIDDLE_EASTERN"
	EthnicityFilterEnumMixed         EthnicityFilterEnum = "MIXED"
	EthnicityFilterEnumOther         EthnicityFilterEnum = "OTHER"
)

var AllEthnicityFilterEnum = []EthnicityFilterEnum{
	EthnicityFilterEnumUnknown,
	EthnicityFilterEnumCaucasian,
	EthnicityFilterEnumBlack,
	EthnicityFilterEnumAsian,
	EthnicityFilterEnumIndian,
	EthnicityFilterEnumLatin,
	EthnicityFilterEnumMiddleEastern,
	EthnicityFilterEnumMixed,
	EthnicityFilterEnumOther,
}

func (e EthnicityFilterEnum) IsValid() bool {
	switch e {
	case EthnicityFilterEnumUnknown, EthnicityFilterEnumCaucasian, EthnicityFilterEnumBlack, EthnicityFilterEnumAsian, EthnicityFilterEnumIndian, EthnicityFilterEnumLatin, EthnicityFilterEnumMiddleEastern, EthnicityFilterEnumMixed, EthnicityFilterEnumOther:
		return true
	}
	return false
}

func (e EthnicityFilterEnum) String() string {
	return string(e)
}

func (e *EthnicityFilterEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = EthnicityFilterEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid EthnicityFilterEnum", str)
	}
	return nil
}

func (e EthnicityFilterEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *EthnicityFilterEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e EthnicityFilterEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type EyeColorEnum string

const (
	EyeColorEnumBlue  EyeColorEnum = "BLUE"
	EyeColorEnumBrown EyeColorEnum = "BROWN"
	EyeColorEnumGrey  EyeColorEnum = "GREY"
	EyeColorEnumGreen EyeColorEnum = "GREEN"
	EyeColorEnumHazel EyeColorEnum = "HAZEL"
	EyeColorEnumRed   EyeColorEnum = "RED"
)

var AllEyeColorEnum = []EyeColorEnum{
	EyeColorEnumBlue,
	EyeColorEnumBrown,
	EyeColorEnumGrey,
	EyeColorEnumGreen,
	EyeColorEnumHazel,
	EyeColorEnumRed,
}

func (e EyeColorEnum) IsValid() bool {
	switch e {
	case EyeColorEnumBlue, EyeColorEnumBrown, EyeColorEnumGrey, EyeColorEnumGreen, EyeColorEnumHazel, EyeColorEnumRed:
		return true
	}
	return false
}

func (e EyeColorEnum) String() string {
	return string(e)
}

func (e *EyeColorEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = EyeColorEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid EyeColorEnum", str)
	}
	return nil
}

func (e EyeColorEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *EyeColorEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e EyeColorEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type FavoriteFilter string

const (
	FavoriteFilterPerformer FavoriteFilter = "PERFORMER"
	FavoriteFilterStudio    FavoriteFilter = "STUDIO"
	FavoriteFilterAll       FavoriteFilter = "ALL"
)

var AllFavoriteFilter = []FavoriteFilter{
	FavoriteFilterPerformer,
	FavoriteFilterStudio,
	FavoriteFilterAll,
}

func (e FavoriteFilter) IsValid() bool {
	switch e {
	case FavoriteFilterPerformer, FavoriteFilterStudio, FavoriteFilterAll:
		return true
	}
	return false
}

func (e FavoriteFilter) String() string {
	return string(e)
}

func (e *FavoriteFilter) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = FavoriteFilter(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid FavoriteFilter", str)
	}
	return nil
}

func (e FavoriteFilter) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *FavoriteFilter) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e FavoriteFilter) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type FingerprintAlgorithm string

const (
	FingerprintAlgorithmMd5    FingerprintAlgorithm = "MD5"
	FingerprintAlgorithmOshash FingerprintAlgorithm = "OSHASH"
	FingerprintAlgorithmPhash  FingerprintAlgorithm = "PHASH"
)

var AllFingerprintAlgorithm = []FingerprintAlgorithm{
	FingerprintAlgorithmMd5,
	FingerprintAlgorithmOshash,
	FingerprintAlgorithmPhash,
}

func (e FingerprintAlgorithm) IsValid() bool {
	switch e {
	case FingerprintAlgorithmMd5, FingerprintAlgorithmOshash, FingerprintAlgorithmPhash:
		return true
	}
	return false
}

func (e FingerprintAlgorithm) String() string {
	return string(e)
}

func (e *FingerprintAlgorithm) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = FingerprintAlgorithm(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid FingerprintAlgorithm", str)
	}
	return nil
}

func (e FingerprintAlgorithm) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *FingerprintAlgorithm) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e FingerprintAlgorithm) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type FingerprintSubmissionType string

const (
	// Positive vote
	FingerprintSubmissionTypeValid FingerprintSubmissionType = "VALID"
	// Report as invalid
	FingerprintSubmissionTypeInvalid FingerprintSubmissionType = "INVALID"
	// Remove vote
	FingerprintSubmissionTypeRemove FingerprintSubmissionType = "REMOVE"
)

var AllFingerprintSubmissionType = []FingerprintSubmissionType{
	FingerprintSubmissionTypeValid,
	FingerprintSubmissionTypeInvalid,
	FingerprintSubmissionTypeRemove,
}

func (e FingerprintSubmissionType) IsValid() bool {
	switch e {
	case FingerprintSubmissionTypeValid, FingerprintSubmissionTypeInvalid, FingerprintSubmissionTypeRemove:
		return true
	}
	return false
}

func (e FingerprintSubmissionType) String() string {
	return string(e)
}

func (e *FingerprintSubmissionType) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = FingerprintSubmissionType(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid FingerprintSubmissionType", str)
	}
	return nil
}

func (e FingerprintSubmissionType) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *FingerprintSubmissionType) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e FingerprintSubmissionType) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type GenderEnum string

const (
	GenderEnumMale              GenderEnum = "MALE"
	GenderEnumFemale            GenderEnum = "FEMALE"
	GenderEnumTransgenderMale   GenderEnum = "TRANSGENDER_MALE"
	GenderEnumTransgenderFemale GenderEnum = "TRANSGENDER_FEMALE"
	GenderEnumIntersex          GenderEnum = "INTERSEX"
	GenderEnumNonBinary         GenderEnum = "NON_BINARY"
)

var AllGenderEnum = []GenderEnum{
	GenderEnumMale,
	GenderEnumFemale,
	GenderEnumTransgenderMale,
	GenderEnumTransgenderFemale,
	GenderEnumIntersex,
	GenderEnumNonBinary,
}

func (e GenderEnum) IsValid() bool {
	switch e {
	case GenderEnumMale, GenderEnumFemale, GenderEnumTransgenderMale, GenderEnumTransgenderFemale, GenderEnumIntersex, GenderEnumNonBinary:
		return true
	}
	return false
}

func (e GenderEnum) String() string {
	return string(e)
}

func (e *GenderEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = GenderEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid GenderEnum", str)
	}
	return nil
}

func (e GenderEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *GenderEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e GenderEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type GenderFilterEnum string

const (
	GenderFilterEnumUnknown           GenderFilterEnum = "UNKNOWN"
	GenderFilterEnumMale              GenderFilterEnum = "MALE"
	GenderFilterEnumFemale            GenderFilterEnum = "FEMALE"
	GenderFilterEnumTransgenderMale   GenderFilterEnum = "TRANSGENDER_MALE"
	GenderFilterEnumTransgenderFemale GenderFilterEnum = "TRANSGENDER_FEMALE"
	GenderFilterEnumIntersex          GenderFilterEnum = "INTERSEX"
	GenderFilterEnumNonBinary         GenderFilterEnum = "NON_BINARY"
)

var AllGenderFilterEnum = []GenderFilterEnum{
	GenderFilterEnumUnknown,
	GenderFilterEnumMale,
	GenderFilterEnumFemale,
	GenderFilterEnumTransgenderMale,
	GenderFilterEnumTransgenderFemale,
	GenderFilterEnumIntersex,
	GenderFilterEnumNonBinary,
}

func (e GenderFilterEnum) IsValid() bool {
	switch e {
	case GenderFilterEnumUnknown, GenderFilterEnumMale, GenderFilterEnumFemale, GenderFilterEnumTransgenderMale, GenderFilterEnumTransgenderFemale, GenderFilterEnumIntersex, GenderFilterEnumNonBinary:
		return true
	}
	return false
}

func (e GenderFilterEnum) String() string {
	return string(e)
}

func (e *GenderFilterEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = GenderFilterEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid GenderFilterEnum", str)
	}
	return nil
}

func (e GenderFilterEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *GenderFilterEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e GenderFilterEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type HairColorEnum string

const (
	HairColorEnumBlonde   HairColorEnum = "BLONDE"
	HairColorEnumBrunette HairColorEnum = "BRUNETTE"
	HairColorEnumBlack    HairColorEnum = "BLACK"
	HairColorEnumRed      HairColorEnum = "RED"
	HairColorEnumAuburn   HairColorEnum = "AUBURN"
	HairColorEnumGrey     HairColorEnum = "GREY"
	HairColorEnumBald     HairColorEnum = "BALD"
	HairColorEnumVarious  HairColorEnum = "VARIOUS"
	HairColorEnumWhite    HairColorEnum = "WHITE"
	HairColorEnumOther    HairColorEnum = "OTHER"
)

var AllHairColorEnum = []HairColorEnum{
	HairColorEnumBlonde,
	HairColorEnumBrunette,
	HairColorEnumBlack,
	HairColorEnumRed,
	HairColorEnumAuburn,
	HairColorEnumGrey,
	HairColorEnumBald,
	HairColorEnumVarious,
	HairColorEnumWhite,
	HairColorEnumOther,
}

func (e HairColorEnum) IsValid() bool {
	switch e {
	case HairColorEnumBlonde, HairColorEnumBrunette, HairColorEnumBlack, HairColorEnumRed, HairColorEnumAuburn, HairColorEnumGrey, HairColorEnumBald, HairColorEnumVarious, HairColorEnumWhite, HairColorEnumOther:
		return true
	}
	return false
}

func (e HairColorEnum) String() string {
	return string(e)
}

func (e *HairColorEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = HairColorEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid HairColorEnum", str)
	}
	return nil
}

func (e HairColorEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *HairColorEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e HairColorEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type NotificationEnum string

const (
	NotificationEnumFavoritePerformerScene NotificationEnum = "FAVORITE_PERFORMER_SCENE"
	NotificationEnumFavoritePerformerEdit  NotificationEnum = "FAVORITE_PERFORMER_EDIT"
	NotificationEnumFavoriteStudioScene    NotificationEnum = "FAVORITE_STUDIO_SCENE"
	NotificationEnumFavoriteStudioEdit     NotificationEnum = "FAVORITE_STUDIO_EDIT"
	NotificationEnumCommentOwnEdit         NotificationEnum = "COMMENT_OWN_EDIT"
	NotificationEnumDownvoteOwnEdit        NotificationEnum = "DOWNVOTE_OWN_EDIT"
	NotificationEnumFailedOwnEdit          NotificationEnum = "FAILED_OWN_EDIT"
	NotificationEnumCommentCommentedEdit   NotificationEnum = "COMMENT_COMMENTED_EDIT"
	NotificationEnumCommentVotedEdit       NotificationEnum = "COMMENT_VOTED_EDIT"
	NotificationEnumUpdatedEdit            NotificationEnum = "UPDATED_EDIT"
	NotificationEnumFingerprintedSceneEdit NotificationEnum = "FINGERPRINTED_SCENE_EDIT"
)

var AllNotificationEnum = []NotificationEnum{
	NotificationEnumFavoritePerformerScene,
	NotificationEnumFavoritePerformerEdit,
	NotificationEnumFavoriteStudioScene,
	NotificationEnumFavoriteStudioEdit,
	NotificationEnumCommentOwnEdit,
	NotificationEnumDownvoteOwnEdit,
	NotificationEnumFailedOwnEdit,
	NotificationEnumCommentCommentedEdit,
	NotificationEnumCommentVotedEdit,
	NotificationEnumUpdatedEdit,
	NotificationEnumFingerprintedSceneEdit,
}

func (e NotificationEnum) IsValid() bool {
	switch e {
	case NotificationEnumFavoritePerformerScene, NotificationEnumFavoritePerformerEdit, NotificationEnumFavoriteStudioScene, NotificationEnumFavoriteStudioEdit, NotificationEnumCommentOwnEdit, NotificationEnumDownvoteOwnEdit, NotificationEnumFailedOwnEdit, NotificationEnumCommentCommentedEdit, NotificationEnumCommentVotedEdit, NotificationEnumUpdatedEdit, NotificationEnumFingerprintedSceneEdit:
		return true
	}
	return false
}

func (e NotificationEnum) String() string {
	return string(e)
}

func (e *NotificationEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = NotificationEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid NotificationEnum", str)
	}
	return nil
}

func (e NotificationEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *NotificationEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e NotificationEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type OperationEnum string

const (
	OperationEnumCreate  OperationEnum = "CREATE"
	OperationEnumModify  OperationEnum = "MODIFY"
	OperationEnumDestroy OperationEnum = "DESTROY"
	OperationEnumMerge   OperationEnum = "MERGE"
)

var AllOperationEnum = []OperationEnum{
	OperationEnumCreate,
	OperationEnumModify,
	OperationEnumDestroy,
	OperationEnumMerge,
}

func (e OperationEnum) IsValid() bool {
	switch e {
	case OperationEnumCreate, OperationEnumModify, OperationEnumDestroy, OperationEnumMerge:
		return true
	}
	return false
}

func (e OperationEnum) String() string {
	return string(e)
}

func (e *OperationEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = OperationEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid OperationEnum", str)
	}
	return nil
}

func (e OperationEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *OperationEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e OperationEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type PerformerSortEnum string

const (
	PerformerSortEnumName            PerformerSortEnum = "NAME"
	PerformerSortEnumBirthdate       PerformerSortEnum = "BIRTHDATE"
	PerformerSortEnumDeathdate       PerformerSortEnum = "DEATHDATE"
	PerformerSortEnumSceneCount      PerformerSortEnum = "SCENE_COUNT"
	PerformerSortEnumCareerStartYear PerformerSortEnum = "CAREER_START_YEAR"
	PerformerSortEnumDebut           PerformerSortEnum = "DEBUT"
	PerformerSortEnumLastScene       PerformerSortEnum = "LAST_SCENE"
	PerformerSortEnumCreatedAt       PerformerSortEnum = "CREATED_AT"
	PerformerSortEnumUpdatedAt       PerformerSortEnum = "UPDATED_AT"
)

var AllPerformerSortEnum = []PerformerSortEnum{
	PerformerSortEnumName,
	PerformerSortEnumBirthdate,
	PerformerSortEnumDeathdate,
	PerformerSortEnumSceneCount,
	PerformerSortEnumCareerStartYear,
	PerformerSortEnumDebut,
	PerformerSortEnumLastScene,
	PerformerSortEnumCreatedAt,
	PerformerSortEnumUpdatedAt,
}

func (e PerformerSortEnum) IsValid() bool {
	switch e {
	case PerformerSortEnumName, PerformerSortEnumBirthdate, PerformerSortEnumDeathdate, PerformerSortEnumSceneCount, PerformerSortEnumCareerStartYear, PerformerSortEnumDebut, PerformerSortEnumLastScene, PerformerSortEnumCreatedAt, PerformerSortEnumUpdatedAt:
		return true
	}
	return false
}

func (e PerformerSortEnum) String() string {
	return string(e)
}

func (e *PerformerSortEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = PerformerSortEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid PerformerSortEnum", str)
	}
	return nil
}

func (e PerformerSortEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *PerformerSortEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e PerformerSortEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type RoleEnum string

const (
	RoleEnumRead   RoleEnum = "READ"
	RoleEnumVote   RoleEnum = "VOTE"
	RoleEnumEdit   RoleEnum = "EDIT"
	RoleEnumModify RoleEnum = "MODIFY"
	RoleEnumAdmin  RoleEnum = "ADMIN"
	// May generate invites without tokens
	RoleEnumInvite RoleEnum = "INVITE"
	// May grant and rescind invite tokens and resind invite keys
	RoleEnumManageInvites RoleEnum = "MANAGE_INVITES"
	RoleEnumBot           RoleEnum = "BOT"
	RoleEnumReadOnly      RoleEnum = "READ_ONLY"
	RoleEnumEditTags      RoleEnum = "EDIT_TAGS"
)

var AllRoleEnum = []RoleEnum{
	RoleEnumRead,
	RoleEnumVote,
	RoleEnumEdit,
	RoleEnumModify,
	RoleEnumAdmin,
	RoleEnumInvite,
	RoleEnumManageInvites,
	RoleEnumBot,
	RoleEnumReadOnly,
	RoleEnumEditTags,
}

func (e RoleEnum) IsValid() bool {
	switch e {
	case RoleEnumRead, RoleEnumVote, RoleEnumEdit, RoleEnumModify, RoleEnumAdmin, RoleEnumInvite, RoleEnumManageInvites, RoleEnumBot, RoleEnumReadOnly, RoleEnumEditTags:
		return true
	}
	return false
}

func (e RoleEnum) String() string {
	return string(e)
}

func (e *RoleEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = RoleEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid RoleEnum", str)
	}
	return nil
}

func (e RoleEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *RoleEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e RoleEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type SceneSortEnum string

const (
	SceneSortEnumTitle     SceneSortEnum = "TITLE"
	SceneSortEnumDate      SceneSortEnum = "DATE"
	SceneSortEnumTrending  SceneSortEnum = "TRENDING"
	SceneSortEnumCreatedAt SceneSortEnum = "CREATED_AT"
	SceneSortEnumUpdatedAt SceneSortEnum = "UPDATED_AT"
)

var AllSceneSortEnum = []SceneSortEnum{
	SceneSortEnumTitle,
	SceneSortEnumDate,
	SceneSortEnumTrending,
	SceneSortEnumCreatedAt,
	SceneSortEnumUpdatedAt,
}

func (e SceneSortEnum) IsValid() bool {
	switch e {
	case SceneSortEnumTitle, SceneSortEnumDate, SceneSortEnumTrending, SceneSortEnumCreatedAt, SceneSortEnumUpdatedAt:
		return true
	}
	return false
}

func (e SceneSortEnum) String() string {
	return string(e)
}

func (e *SceneSortEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = SceneSortEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid SceneSortEnum", str)
	}
	return nil
}

func (e SceneSortEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *SceneSortEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e SceneSortEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type SortDirectionEnum string

const (
	SortDirectionEnumAsc  SortDirectionEnum = "ASC"
	SortDirectionEnumDesc SortDirectionEnum = "DESC"
)

var AllSortDirectionEnum = []SortDirectionEnum{
	SortDirectionEnumAsc,
	SortDirectionEnumDesc,
}

func (e SortDirectionEnum) IsValid() bool {
	switch e {
	case SortDirectionEnumAsc, SortDirectionEnumDesc:
		return true
	}
	return false
}

func (e SortDirectionEnum) String() string {
	return string(e)
}

func (e *SortDirectionEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = SortDirectionEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid SortDirectionEnum", str)
	}
	return nil
}

func (e SortDirectionEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *SortDirectionEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e SortDirectionEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type StudioSortEnum string

const (
	StudioSortEnumName      StudioSortEnum = "NAME"
	StudioSortEnumCreatedAt StudioSortEnum = "CREATED_AT"
	StudioSortEnumUpdatedAt StudioSortEnum = "UPDATED_AT"
)

var AllStudioSortEnum = []StudioSortEnum{
	StudioSortEnumName,
	StudioSortEnumCreatedAt,
	StudioSortEnumUpdatedAt,
}

func (e StudioSortEnum) IsValid() bool {
	switch e {
	case StudioSortEnumName, StudioSortEnumCreatedAt, StudioSortEnumUpdatedAt:
		return true
	}
	return false
}

func (e StudioSortEnum) String() string {
	return string(e)
}

func (e *StudioSortEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = StudioSortEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid StudioSortEnum", str)
	}
	return nil
}

func (e StudioSortEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *StudioSortEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e StudioSortEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type TagGroupEnum string

const (
	TagGroupEnumPeople TagGroupEnum = "PEOPLE"
	TagGroupEnumScene  TagGroupEnum = "SCENE"
	TagGroupEnumAction TagGroupEnum = "ACTION"
)

var AllTagGroupEnum = []TagGroupEnum{
	TagGroupEnumPeople,
	TagGroupEnumScene,
	TagGroupEnumAction,
}

func (e TagGroupEnum) IsValid() bool {
	switch e {
	case TagGroupEnumPeople, TagGroupEnumScene, TagGroupEnumAction:
		return true
	}
	return false
}

func (e TagGroupEnum) String() string {
	return string(e)
}

func (e *TagGroupEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = TagGroupEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid TagGroupEnum", str)
	}
	return nil
}

func (e TagGroupEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *TagGroupEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e TagGroupEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type TagSortEnum string

const (
	TagSortEnumName      TagSortEnum = "NAME"
	TagSortEnumCreatedAt TagSortEnum = "CREATED_AT"
	TagSortEnumUpdatedAt TagSortEnum = "UPDATED_AT"
)

var AllTagSortEnum = []TagSortEnum{
	TagSortEnumName,
	TagSortEnumCreatedAt,
	TagSortEnumUpdatedAt,
}

func (e TagSortEnum) IsValid() bool {
	switch e {
	case TagSortEnumName, TagSortEnumCreatedAt, TagSortEnumUpdatedAt:
		return true
	}
	return false
}

func (e TagSortEnum) String() string {
	return string(e)
}

func (e *TagSortEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = TagSortEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid TagSortEnum", str)
	}
	return nil
}

func (e TagSortEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *TagSortEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e TagSortEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type TargetTypeEnum string

const (
	TargetTypeEnumScene     TargetTypeEnum = "SCENE"
	TargetTypeEnumStudio    TargetTypeEnum = "STUDIO"
	TargetTypeEnumPerformer TargetTypeEnum = "PERFORMER"
	TargetTypeEnumTag       TargetTypeEnum = "TAG"
)

var AllTargetTypeEnum = []TargetTypeEnum{
	TargetTypeEnumScene,
	TargetTypeEnumStudio,
	TargetTypeEnumPerformer,
	TargetTypeEnumTag,
}

func (e TargetTypeEnum) IsValid() bool {
	switch e {
	case TargetTypeEnumScene, TargetTypeEnumStudio, TargetTypeEnumPerformer, TargetTypeEnumTag:
		return true
	}
	return false
}

func (e TargetTypeEnum) String() string {
	return string(e)
}

func (e *TargetTypeEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = TargetTypeEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid TargetTypeEnum", str)
	}
	return nil
}

func (e TargetTypeEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *TargetTypeEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e TargetTypeEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type UserChangeEmailStatus string

const (
	UserChangeEmailStatusConfirmOld   UserChangeEmailStatus = "CONFIRM_OLD"
	UserChangeEmailStatusConfirmNew   UserChangeEmailStatus = "CONFIRM_NEW"
	UserChangeEmailStatusExpired      UserChangeEmailStatus = "EXPIRED"
	UserChangeEmailStatusInvalidToken UserChangeEmailStatus = "INVALID_TOKEN"
	UserChangeEmailStatusSuccess      UserChangeEmailStatus = "SUCCESS"
	UserChangeEmailStatusError        UserChangeEmailStatus = "ERROR"
)

var AllUserChangeEmailStatus = []UserChangeEmailStatus{
	UserChangeEmailStatusConfirmOld,
	UserChangeEmailStatusConfirmNew,
	UserChangeEmailStatusExpired,
	UserChangeEmailStatusInvalidToken,
	UserChangeEmailStatusSuccess,
	UserChangeEmailStatusError,
}

func (e UserChangeEmailStatus) IsValid() bool {
	switch e {
	case UserChangeEmailStatusConfirmOld, UserChangeEmailStatusConfirmNew, UserChangeEmailStatusExpired, UserChangeEmailStatusInvalidToken, UserChangeEmailStatusSuccess, UserChangeEmailStatusError:
		return true
	}
	return false
}

func (e UserChangeEmailStatus) String() string {
	return string(e)
}

func (e *UserChangeEmailStatus) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = UserChangeEmailStatus(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid UserChangeEmailStatus", str)
	}
	return nil
}

func (e UserChangeEmailStatus) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *UserChangeEmailStatus) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e UserChangeEmailStatus) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type UserVotedFilterEnum string

const (
	UserVotedFilterEnumAbstain  UserVotedFilterEnum = "ABSTAIN"
	UserVotedFilterEnumAccept   UserVotedFilterEnum = "ACCEPT"
	UserVotedFilterEnumReject   UserVotedFilterEnum = "REJECT"
	UserVotedFilterEnumNotVoted UserVotedFilterEnum = "NOT_VOTED"
)

var AllUserVotedFilterEnum = []UserVotedFilterEnum{
	UserVotedFilterEnumAbstain,
	UserVotedFilterEnumAccept,
	UserVotedFilterEnumReject,
	UserVotedFilterEnumNotVoted,
}

func (e UserVotedFilterEnum) IsValid() bool {
	switch e {
	case UserVotedFilterEnumAbstain, UserVotedFilterEnumAccept, UserVotedFilterEnumReject, UserVotedFilterEnumNotVoted:
		return true
	}
	return false
}

func (e UserVotedFilterEnum) String() string {
	return string(e)
}

func (e *UserVotedFilterEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = UserVotedFilterEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid UserVotedFilterEnum", str)
	}
	return nil
}

func (e UserVotedFilterEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *UserVotedFilterEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e UserVotedFilterEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type ValidSiteTypeEnum string

const (
	ValidSiteTypeEnumPerformer ValidSiteTypeEnum = "PERFORMER"
	ValidSiteTypeEnumScene     ValidSiteTypeEnum = "SCENE"
	ValidSiteTypeEnumStudio    ValidSiteTypeEnum = "STUDIO"
)

var AllValidSiteTypeEnum = []ValidSiteTypeEnum{
	ValidSiteTypeEnumPerformer,
	ValidSiteTypeEnumScene,
	ValidSiteTypeEnumStudio,
}

func (e ValidSiteTypeEnum) IsValid() bool {
	switch e {
	case ValidSiteTypeEnumPerformer, ValidSiteTypeEnumScene, ValidSiteTypeEnumStudio:
		return true
	}
	return false
}

func (e ValidSiteTypeEnum) String() string {
	return string(e)
}

func (e *ValidSiteTypeEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = ValidSiteTypeEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid ValidSiteTypeEnum", str)
	}
	return nil
}

func (e ValidSiteTypeEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *ValidSiteTypeEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e ValidSiteTypeEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type VoteStatusEnum string

const (
	VoteStatusEnumAccepted          VoteStatusEnum = "ACCEPTED"
	VoteStatusEnumRejected          VoteStatusEnum = "REJECTED"
	VoteStatusEnumPending           VoteStatusEnum = "PENDING"
	VoteStatusEnumImmediateAccepted VoteStatusEnum = "IMMEDIATE_ACCEPTED"
	VoteStatusEnumImmediateRejected VoteStatusEnum = "IMMEDIATE_REJECTED"
	VoteStatusEnumFailed            VoteStatusEnum = "FAILED"
	VoteStatusEnumCanceled          VoteStatusEnum = "CANCELED"
)

var AllVoteStatusEnum = []VoteStatusEnum{
	VoteStatusEnumAccepted,
	VoteStatusEnumRejected,
	VoteStatusEnumPending,
	VoteStatusEnumImmediateAccepted,
	VoteStatusEnumImmediateRejected,
	VoteStatusEnumFailed,
	VoteStatusEnumCanceled,
}

func (e VoteStatusEnum) IsValid() bool {
	switch e {
	case VoteStatusEnumAccepted, VoteStatusEnumRejected, VoteStatusEnumPending, VoteStatusEnumImmediateAccepted, VoteStatusEnumImmediateRejected, VoteStatusEnumFailed, VoteStatusEnumCanceled:
		return true
	}
	return false
}

func (e VoteStatusEnum) String() string {
	return string(e)
}

func (e *VoteStatusEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = VoteStatusEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid VoteStatusEnum", str)
	}
	return nil
}

func (e VoteStatusEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *VoteStatusEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e VoteStatusEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}

type VoteTypeEnum string

const (
	VoteTypeEnumAbstain VoteTypeEnum = "ABSTAIN"
	VoteTypeEnumAccept  VoteTypeEnum = "ACCEPT"
	VoteTypeEnumReject  VoteTypeEnum = "REJECT"
	// Immediately accepts the edit - bypassing the vote
	VoteTypeEnumImmediateAccept VoteTypeEnum = "IMMEDIATE_ACCEPT"
	// Immediately rejects the edit - bypassing the vote
	VoteTypeEnumImmediateReject VoteTypeEnum = "IMMEDIATE_REJECT"
)

var AllVoteTypeEnum = []VoteTypeEnum{
	VoteTypeEnumAbstain,
	VoteTypeEnumAccept,
	VoteTypeEnumReject,
	VoteTypeEnumImmediateAccept,
	VoteTypeEnumImmediateReject,
}

func (e VoteTypeEnum) IsValid() bool {
	switch e {
	case VoteTypeEnumAbstain, VoteTypeEnumAccept, VoteTypeEnumReject, VoteTypeEnumImmediateAccept, VoteTypeEnumImmediateReject:
		return true
	}
	return false
}

func (e VoteTypeEnum) String() string {
	return string(e)
}

func (e *VoteTypeEnum) UnmarshalGQL(v any) error {
	str, ok := v.(string)
	if !ok {
		return fmt.Errorf("enums must be strings")
	}

	*e = VoteTypeEnum(str)
	if !e.IsValid() {
		return fmt.Errorf("%s is not a valid VoteTypeEnum", str)
	}
	return nil
}

func (e VoteTypeEnum) MarshalGQL(w io.Writer) {
	fmt.Fprint(w, strconv.Quote(e.String()))
}

func (e *VoteTypeEnum) UnmarshalJSON(b []byte) error {
	s, err := strconv.Unquote(string(b))
	if err != nil {
		return err
	}
	return e.UnmarshalGQL(s)
}

func (e VoteTypeEnum) MarshalJSON() ([]byte, error) {
	var buf bytes.Buffer
	e.MarshalGQL(&buf)
	return buf.Bytes(), nil
}
