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