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