var ( MapType = types.NewMap(types.Typ[types.String], types.NewInterfaceType(nil, nil).Complete()) InterfaceType = types.NewInterfaceType(nil, nil) )
var ErrTypeNotFound = errors.New("unable to find type")
func CompleteConfig(config *Config) error
CompleteConfig fills in the schema and other values to a config loaded from YAML.
func IsNilable(t types.Type) bool
Binder connects graphql types to golang types using static analysis
type Binder struct { References []*TypeReference SawInvalid bool // contains filtered or unexported fields }
func (b *Binder) CopyModifiersFromAst(t *ast.Type, base types.Type) types.Type
func (b *Binder) DefaultUserObject(name string) (types.Type, error)
func (b *Binder) FindObject(pkgName string, typeName string) (types.Object, error)
func (b *Binder) FindType(pkgName string, typeName string) (types.Type, error)
func (b *Binder) FindTypeFromName(name string) (types.Type, error)
func (b *Binder) InstantiateType(orig types.Type, targs []types.Type) (types.Type, error)
func (b *Binder) ObjectPosition(typ types.Object) token.Position
func (b *Binder) PointerTo(ref *TypeReference) *TypeReference
func (b *Binder) PushRef(ret *TypeReference)
func (b *Binder) TypePosition(typ types.Type) token.Position
func (b *Binder) TypeReference(schemaType *ast.Type, bindTarget types.Type) (ret *TypeReference, err error)
type Config struct { SchemaFilename StringList `yaml:"schema,omitempty"` Exec ExecConfig `yaml:"exec"` Model PackageConfig `yaml:"model,omitempty"` Federation PackageConfig `yaml:"federation,omitempty"` Resolver ResolverConfig `yaml:"resolver,omitempty"` AutoBind []string `yaml:"autobind"` Models TypeMap `yaml:"models,omitempty"` StructTag string `yaml:"struct_tag,omitempty"` Directives map[string]DirectiveConfig `yaml:"directives,omitempty"` GoBuildTags StringList `yaml:"go_build_tags,omitempty"` GoInitialisms GoInitialismsConfig `yaml:"go_initialisms,omitempty"` OmitSliceElementPointers bool `yaml:"omit_slice_element_pointers,omitempty"` OmitGetters bool `yaml:"omit_getters,omitempty"` OmitInterfaceChecks bool `yaml:"omit_interface_checks,omitempty"` OmitComplexity bool `yaml:"omit_complexity,omitempty"` OmitGQLGenFileNotice bool `yaml:"omit_gqlgen_file_notice,omitempty"` OmitGQLGenVersionInFileNotice bool `yaml:"omit_gqlgen_version_in_file_notice,omitempty"` OmitRootModels bool `yaml:"omit_root_models,omitempty"` OmitResolverFields bool `yaml:"omit_resolver_fields,omitempty"` StructFieldsAlwaysPointers bool `yaml:"struct_fields_always_pointers,omitempty"` ReturnPointersInUmarshalInput bool `yaml:"return_pointers_in_unmarshalinput,omitempty"` ResolversAlwaysReturnPointers bool `yaml:"resolvers_always_return_pointers,omitempty"` NullableInputOmittable bool `yaml:"nullable_input_omittable,omitempty"` EnableModelJsonOmitemptyTag *bool `yaml:"enable_model_json_omitempty_tag,omitempty"` SkipValidation bool `yaml:"skip_validation,omitempty"` SkipModTidy bool `yaml:"skip_mod_tidy,omitempty"` Sources []*ast.Source `yaml:"-"` Packages *code.Packages `yaml:"-"` Schema *ast.Schema `yaml:"-"` // Deprecated: use Federation instead. Will be removed next release Federated bool `yaml:"federated,omitempty"` }
func DefaultConfig() *Config
DefaultConfig creates a copy of the default config
func LoadConfig(filename string) (*Config, error)
LoadConfig reads the gqlgen.yml config file
func LoadConfigFromDefaultLocations() (*Config, error)
LoadConfigFromDefaultLocations looks for a config file in the current directory, and all parent directories walking up the tree. The closest config file will be returned.
func LoadDefaultConfig() (*Config, error)
LoadDefaultConfig loads the default config so that it is ready to be used
func ReadConfig(cfgFile io.Reader) (*Config, error)
func (c *Config) Init() error
func (c *Config) IsRoot(def *ast.Definition) bool
func (c *Config) LoadSchema() error
func (c *Config) NewBinder() *Binder
func (c *Config) ReloadAllPackages()
type DirectiveConfig struct { SkipRuntime bool `yaml:"skip_runtime"` }
type ExecConfig struct { Package string `yaml:"package,omitempty"` Layout ExecLayout `yaml:"layout,omitempty"` // Default: single-file // Only for single-file layout: Filename string `yaml:"filename,omitempty"` // Only for follow-schema layout: FilenameTemplate string `yaml:"filename_template,omitempty"` // String template with {name} as placeholder for base name. DirName string `yaml:"dir"` }
func (r *ExecConfig) Check() error
func (r *ExecConfig) Dir() string
func (r *ExecConfig) ImportPath() string
func (r *ExecConfig) IsDefined() bool
func (r *ExecConfig) Pkg() *types.Package
type ExecLayout string
var ( // Write all generated code to a single file. ExecLayoutSingleFile ExecLayout = "single-file" // Write generated code to a directory, generating one Go source file for each GraphQL schema file. ExecLayoutFollowSchema ExecLayout = "follow-schema" )
GoInitialismsConfig allows to modify the default behavior of naming Go methods, types and properties
type GoInitialismsConfig struct { // If true, the Initialisms won't get appended to the default ones but replace them ReplaceDefaults bool `yaml:"replace_defaults"` // Custom initialisms to be added or to replace the default ones Initialisms []string `yaml:"initialisms"` }
type ModelExtraField struct { // Type is the Go type of the field. // // It supports the builtin basic types (like string or int64), named types // (qualified by the full package path), pointers to those types (prefixed // with `*`), and slices of those types (prefixed with `[]`). // // For example, the following are valid types: // string // *github.com/author/package.Type // []string // []*github.com/author/package.Type // // Note that the type will be referenced from the generated/graphql, which // means the package it lives in must not reference the generated/graphql // package to avoid circular imports. // restrictions. Type string `yaml:"type"` // OverrideTags is an optional override of the Go field tag. OverrideTags string `yaml:"overrideTags"` // Description is an optional the Go field doc-comment. Description string `yaml:"description"` }
type PackageConfig struct { Filename string `yaml:"filename,omitempty"` Package string `yaml:"package,omitempty"` Version int `yaml:"version,omitempty"` ModelTemplate string `yaml:"model_template,omitempty"` Options map[string]bool `yaml:"options,omitempty"` }
func (c *PackageConfig) Check() error
func (c *PackageConfig) Dir() string
func (c *PackageConfig) ImportPath() string
func (c *PackageConfig) IsDefined() bool
func (c *PackageConfig) Pkg() *types.Package
type ResolverConfig struct { Filename string `yaml:"filename,omitempty"` FilenameTemplate string `yaml:"filename_template,omitempty"` Package string `yaml:"package,omitempty"` Type string `yaml:"type,omitempty"` Layout ResolverLayout `yaml:"layout,omitempty"` DirName string `yaml:"dir"` OmitTemplateComment bool `yaml:"omit_template_comment,omitempty"` ResolverTemplate string `yaml:"resolver_template,omitempty"` }
func (r *ResolverConfig) Check() error
func (r *ResolverConfig) Dir() string
func (r *ResolverConfig) ImportPath() string
func (r *ResolverConfig) IsDefined() bool
func (r *ResolverConfig) Pkg() *types.Package
type ResolverLayout string
var ( LayoutSingleFile ResolverLayout = "single-file" LayoutFollowSchema ResolverLayout = "follow-schema" )
type StringList []string
func (a StringList) Has(file string) bool
func (a *StringList) UnmarshalYAML(unmarshal func(interface{}) error) error
type TypeMap map[string]TypeMapEntry
func (tm TypeMap) Add(name string, goType string)
func (tm TypeMap) Check() error
func (tm TypeMap) Exists(typeName string) bool
func (tm TypeMap) ForceGenerate(name string, forceGenerate bool)
func (tm TypeMap) ReferencedPackages() []string
func (tm TypeMap) UserDefined(typeName string) bool
type TypeMapEntry struct { Model StringList `yaml:"model,omitempty"` ForceGenerate bool `yaml:"forceGenerate,omitempty"` Fields map[string]TypeMapField `yaml:"fields,omitempty"` // Key is the Go name of the field. ExtraFields map[string]ModelExtraField `yaml:"extraFields,omitempty"` }
type TypeMapField struct { Resolver bool `yaml:"resolver"` FieldName string `yaml:"fieldName"` GeneratedMethod string `yaml:"-"` }
TypeReference is used by args and field types. The Definition can refer to both input and output types.
type TypeReference struct { Definition *ast.Definition GQL *ast.Type GO types.Type // Type of the field being bound. Could be a pointer or a value type of Target. Target types.Type // The actual type that we know how to bind to. May require pointer juggling when traversing to fields. CastType types.Type // Before calling marshalling functions cast from/to this base type Marshaler *types.Func // When using external marshalling functions this will point to the Marshal function Unmarshaler *types.Func // When using external marshalling functions this will point to the Unmarshal function IsMarshaler bool // Does the type implement graphql.Marshaler and graphql.Unmarshaler IsOmittable bool // Is the type wrapped with Omittable IsContext bool // Is the Marshaler/Unmarshaller the context version; applies to either the method or interface variety. PointersInUmarshalInput bool // Inverse values and pointers in return. IsRoot bool // Is the type a root level definition such as Query, Mutation or Subscription }
func (ref *TypeReference) Elem() *TypeReference
func (ref *TypeReference) IsMap() bool
func (ref *TypeReference) IsNamed() bool
func (ref *TypeReference) IsNilable() bool
func (ref *TypeReference) IsPtr() bool
func (ref *TypeReference) IsPtrToIntf() bool
func (ref *TypeReference) IsPtrToPtr() bool
fix for https://github.com/golang/go/issues/31103 may make it possible to remove this (may still be useful)
func (ref *TypeReference) IsPtrToSlice() bool
func (ref *TypeReference) IsScalar() bool
func (ref *TypeReference) IsSlice() bool
func (ref *TypeReference) IsStruct() bool
func (ref *TypeReference) IsTargetNilable() bool
func (ref *TypeReference) MarshalFunc() string
func (ref *TypeReference) UniquenessKey() string
func (ref *TypeReference) UnmarshalFunc() string