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

package graphql

import (
	"fmt"
	"io"
	"strconv"
)

type Character interface {
	IsCharacter()
}

type FriendsConnection struct {
	TotalCount int         `json:"totalCount"`
	Friends    []Character `json:"friends"`
}

type Human struct {
	ID                string             `json:"id"`
	Name              string             `json:"name"`
	Friends           []*Human           `json:"friends"`
	Height            *Unit              `json:"height"`
	FriendsConnection *FriendsConnection `json:"friendsConnection"`
}

func (Human) IsCharacter() {}

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

type LengthUnit string

const (
	LengthUnitMeter LengthUnit = "Meter"
	LengthUnitFeet  LengthUnit = "Feet"
)

var AllLengthUnit = []LengthUnit{
	LengthUnitMeter,
	LengthUnitFeet,
}

func (e LengthUnit) IsValid() bool {
	switch e {
	case LengthUnitMeter, LengthUnitFeet:
		return true
	}
	return false
}

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

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

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

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