github.com/99designs/gqlgen@v0.17.45/plugin/modelgen/testdata/customModelTemplate.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 // Add any new functions or any additional code/template functionality here 16 17 {{- range $model := .Interfaces }} 18 {{ with .Description }} {{.|prefixLines "// "}} {{ end }} 19 type {{ goModelName .Name }} interface { 20 {{- if not .OmitCheck }} 21 {{- range $impl := .Implements }} 22 Is{{ goModelName $impl }}() 23 {{- end }} 24 Is{{ goModelName .Name }}() 25 {{- end }} 26 {{- range $field := .Fields }} 27 {{- with .Description }} 28 {{.|prefixLines "// "}} 29 {{- end}} 30 Get{{ $field.GoName }}() {{ $field.Type | ref }} 31 {{- end }} 32 } 33 {{- end }} 34 35 {{ range $model := .Models }} 36 {{with .Description }} {{.|prefixLines "// "}} {{end}} 37 type {{ goModelName .Name }} struct { 38 {{- range $field := .Fields }} 39 {{- with .Description }} 40 {{.|prefixLines "// "}} 41 {{- end}} 42 {{ $field.GoName }} {{$field.Type | ref}} `{{$field.Tag}}` 43 {{- end }} 44 } 45 46 {{ range .Implements }} 47 func ({{ goModelName $model.Name }}) Is{{ goModelName . }}() {} 48 {{- with getInterfaceByName . }} 49 {{- range .Fields }} 50 {{- with .Description }} 51 {{.|prefixLines "// "}} 52 {{- end}} 53 {{ generateGetter $model . }} 54 {{- end }} 55 {{- end }} 56 {{ end }} 57 {{- end}} 58 59 {{ range $enum := .Enums }} 60 {{ with .Description }} {{.|prefixLines "// "}} {{end}} 61 type {{ goModelName .Name }} string 62 const ( 63 {{- range $value := .Values}} 64 {{- with .Description}} 65 {{.|prefixLines "// "}} 66 {{- end}} 67 {{ goModelName $enum.Name .Name }} {{ goModelName $enum.Name }} = {{ .Name|quote }} 68 {{- end }} 69 ) 70 71 var All{{ goModelName .Name }} = []{{ goModelName .Name }}{ 72 {{- range $value := .Values}} 73 {{ goModelName $enum.Name .Name }}, 74 {{- end }} 75 } 76 77 func (e {{ goModelName .Name }}) IsValid() bool { 78 switch e { 79 case {{ range $index, $element := .Values}}{{if $index}},{{end}}{{ goModelName $enum.Name $element.Name }}{{end}}: 80 return true 81 } 82 return false 83 } 84 85 func (e {{ goModelName .Name }}) String() string { 86 return string(e) 87 } 88 89 func (e *{{ goModelName .Name }}) UnmarshalGQL(v interface{}) error { 90 str, ok := v.(string) 91 if !ok { 92 return fmt.Errorf("enums must be strings") 93 } 94 95 *e = {{ goModelName .Name }}(str) 96 if !e.IsValid() { 97 return fmt.Errorf("%s is not a valid {{ .Name }}", str) 98 } 99 return nil 100 } 101 102 func (e {{ goModelName .Name }}) MarshalGQL(w io.Writer) { 103 fmt.Fprint(w, strconv.Quote(e.String())) 104 } 105 106 {{- end }}