github.com/99designs/gqlgen@v0.17.45/plugin/modelgen/models.gotpl (about) 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 }}