github.com/niko0xdev/gqlgen@v0.17.55-0.20240120102243-2ecff98c3e37/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/niko0xdev/gqlgen/graphql" }}
    13  {{ reserveImport "github.com/niko0xdev/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 }}