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