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" }}
11{{ reserveImport "github.com/vektah/gqlparser/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 {{.Name|go }} interface {
18 Is{{.Name|go }}()
19 }
20{{- end }}
21
22{{ range $model := .Models }}
23 {{with .Description }} {{.|prefixLines "// "}} {{end}}
24 type {{ .Name|go }} struct {
25 {{- range $field := .Fields }}
26 {{- with .Description }}
27 {{.|prefixLines "// "}}
28 {{- end}}
29 {{ $field.Name|go }} {{$field.Type | ref}} `{{$field.Tag}}`
30 {{- end }}
31 }
32
33 {{- range $iface := .Implements }}
34 func ({{ $model.Name|go }}) Is{{ $iface|go }}() {}
35 {{- end }}
36{{- end}}
37
38{{ range $enum := .Enums }}
39 {{ with .Description }} {{.|prefixLines "// "}} {{end}}
40 type {{.Name|go }} string
41 const (
42 {{- range $value := .Values}}
43 {{- with .Description}}
44 {{.|prefixLines "// "}}
45 {{- end}}
46 {{ $enum.Name|go }}{{ .Name|go }} {{$enum.Name|go }} = {{.Name|quote}}
47 {{- end }}
48 )
49
50 var All{{.Name|go }} = []{{ .Name|go }}{
51 {{- range $value := .Values}}
52 {{$enum.Name|go }}{{ .Name|go }},
53 {{- end }}
54 }
55
56 func (e {{.Name|go }}) IsValid() bool {
57 switch e {
58 case {{ range $index, $element := .Values}}{{if $index}},{{end}}{{ $enum.Name|go }}{{ $element.Name|go }}{{end}}:
59 return true
60 }
61 return false
62 }
63
64 func (e {{.Name|go }}) String() string {
65 return string(e)
66 }
67
68 func (e *{{.Name|go }}) UnmarshalGQL(v interface{}) error {
69 str, ok := v.(string)
70 if !ok {
71 return fmt.Errorf("enums must be strings")
72 }
73
74 *e = {{ .Name|go }}(str)
75 if !e.IsValid() {
76 return fmt.Errorf("%s is not a valid {{ .Name }}", str)
77 }
78 return nil
79 }
80
81 func (e {{.Name|go }}) MarshalGQL(w io.Writer) {
82 fmt.Fprint(w, strconv.Quote(e.String()))
83 }
84
85{{- end }}