github.com/kerryoscer/gqlgen@v0.17.29/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/kerryoscer/gqlgen/graphql" }}
    13  {{ reserveImport "github.com/kerryoscer/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 }}