...

Text file src/github.com/99designs/gqlgen/plugin/modelgen/models.gotpl

Documentation: github.com/99designs/gqlgen/plugin/modelgen

     1{{ reserveImport "context"  }}
     2{{ reserveImport "fmt"  }}
     3{{ reserveImport "io"  }}
     4{{ reserveImport "strconv"  }}
     5{{ reserveImport "time"  }}
     6{{ reserveImport "sync"  }}
     7{{ reserveImport "errors"  }}
     8{{ reserveImport "bytes"  }}
     9
    10{{ reserveImport "github.com/vektah/gqlparser/v2" }}
    11{{ reserveImport "github.com/vektah/gqlparser/v2/ast" }}
    12{{ reserveImport "github.com/99designs/gqlgen/graphql" }}
    13{{ reserveImport "github.com/99designs/gqlgen/graphql/introspection" }}
    14
    15{{- range $model := .Interfaces }}
    16	{{ with .Description }} {{.|prefixLines "// "}} {{ end }}
    17	type {{ goModelName .Name }} interface {
    18		{{- if not .OmitCheck }}
    19			{{- range $impl := .Implements }}
    20				Is{{ goModelName $impl }}()
    21			{{- end }}
    22			Is{{ goModelName .Name }}()
    23		{{- end }}
    24		{{- range $field := .Fields }}
    25			{{- with .Description }}
    26				{{.|prefixLines "// "}}
    27			{{- end}}
    28			Get{{ $field.GoName }}() {{ $field.Type | ref }}
    29		{{- end }}
    30	}
    31{{- end }}
    32
    33{{ range $model := .Models }}
    34	{{with .Description }} {{.|prefixLines "// "}} {{end}}
    35	type {{ goModelName .Name }} struct {
    36		{{- range $field := .Fields }}
    37			{{- with .Description }}
    38				{{.|prefixLines "// "}}
    39			{{- end}}
    40			{{ $field.GoName }} {{$field.Type | ref}} `{{$field.Tag}}`
    41		{{- end }}
    42	}
    43
    44	{{ range .Implements }}
    45		func ({{ goModelName $model.Name }}) Is{{ goModelName . }}() {}
    46		{{- with getInterfaceByName . }}
    47			{{- range .Fields }}
    48				{{- with .Description }}
    49					{{.|prefixLines "// "}}
    50				{{- end}}
    51				{{ generateGetter $model . }}
    52			{{- end }}
    53		{{- end }}
    54	{{ end }}
    55{{- end}}
    56
    57{{ range $enum := .Enums }}
    58	{{ with .Description }} {{.|prefixLines "// "}} {{end}}
    59	type {{ goModelName .Name }} string
    60	const (
    61	{{- range $value := .Values}}
    62		{{- with .Description}}
    63			{{.|prefixLines "// "}}
    64		{{- end}}
    65		{{ goModelName $enum.Name .Name }} {{ goModelName $enum.Name }} = {{ .Name|quote }}
    66	{{- end }}
    67	)
    68
    69	var All{{ goModelName .Name }} = []{{ goModelName .Name }}{
    70	{{- range $value := .Values}}
    71		{{ goModelName $enum.Name .Name }},
    72	{{- end }}
    73	}
    74
    75	func (e {{ goModelName .Name }}) IsValid() bool {
    76		switch e {
    77		case {{ range $index, $element := .Values}}{{if $index}},{{end}}{{ goModelName $enum.Name $element.Name }}{{end}}:
    78			return true
    79		}
    80		return false
    81	}
    82
    83	func (e {{ goModelName .Name }}) String() string {
    84		return string(e)
    85	}
    86
    87	func (e *{{ goModelName .Name }}) UnmarshalGQL(v interface{}) error {
    88		str, ok := v.(string)
    89		if !ok {
    90			return fmt.Errorf("enums must be strings")
    91		}
    92
    93		*e = {{ goModelName .Name }}(str)
    94		if !e.IsValid() {
    95			return fmt.Errorf("%s is not a valid {{ .Name }}", str)
    96		}
    97		return nil
    98	}
    99
   100	func (e {{ goModelName .Name }}) MarshalGQL(w io.Writer) {
   101		fmt.Fprint(w, strconv.Quote(e.String()))
   102	}
   103
   104{{- end }}

View as plain text