entc/gen: add Type.EnumFields helper (#584)

Signed-off-by: Alex Snast <alexsn@fb.com>
This commit is contained in:
Alex Snast
2020-07-05 14:17:58 +03:00
committed by GitHub
parent dca96ca564
commit 6e1da6a891
3 changed files with 47 additions and 38 deletions

File diff suppressed because one or more lines are too long

View File

@@ -81,52 +81,50 @@ const (
{{ end }}
{{/* define custom type for enum fields */}}
{{ range $f := $.Fields -}}
{{ if $f.IsEnum }}
{{/* omit the package name from the type. */}}
{{ $enum := trimPackage $f.Type.String $.Package }}
// {{ $enum }} defines the type for the {{ $f.Name }} enum field.
type {{ $enum }} string
{{ range $f := $.EnumFields -}}
{{/* omit the package name from the type. */}}
{{ $enum := trimPackage $f.Type.String $.Package }}
// {{ $enum }} defines the type for the {{ $f.Name }} enum field.
type {{ $enum }} string
{{- if $f.Default }}
{{- /* find the enum that holds the default value. */ -}}
{{- range $_, $e := $f.Enums }}
{{- if eq $e $f.DefaultValue }}
{{- $name := $f.EnumName $e }}
// {{ $name }} is the default {{ $enum }}.
const {{ $f.DefaultName }} = {{ $name }}
{{- end }}
{{- if $f.Default }}
{{- /* find the enum that holds the default value. */ -}}
{{- range $_, $e := $f.Enums }}
{{- if eq $e $f.DefaultValue }}
{{- $name := $f.EnumName $e }}
// {{ $name }} is the default {{ $enum }}.
const {{ $f.DefaultName }} = {{ $name }}
{{- end }}
{{- end }}
{{- end }}
// {{ $enum }} values.
const (
{{- range $_, $e := $f.Enums }}
{{ $f.EnumName $e }} {{ $enum }} = "{{ $e }}"
{{- end }}
)
// {{ $enum }} values.
const (
{{- range $_, $e := $f.Enums }}
{{ $f.EnumName $e }} {{ $enum }} = "{{ $e }}"
{{- end }}
)
{{ $receiver := receiver $f.BuilderField -}}
func ({{ $receiver }} {{ $enum }}) String() string {
return string({{ $receiver }})
{{ $receiver := receiver $f.BuilderField -}}
func ({{ $receiver }} {{ $enum }}) String() string {
return string({{ $receiver }})
}
{{ $name := $f.Validator -}}
// {{ $name }} is a validator for the "{{ $receiver }}" field enum values. It is called by the builders before save.
func {{ $name }}({{ $receiver }} {{ $enum }}) error {
switch {{ $receiver }} {
case {{ range $i, $e := $f.Enums }}{{ if ne $i 0 }},{{ end }}{{ $f.StructField }}{{ pascal $e }}{{ end }}:
return nil
default:
return fmt.Errorf("{{ $.Package }}: invalid enum value for {{ $f.Name }} field: %q", {{ $receiver }})
}
{{ $name := $f.Validator -}}
// {{ $name }} is a validator for the "{{ $receiver }}" field enum values. It is called by the builders before save.
func {{ $name }}({{ $receiver }} {{ $enum }}) error {
switch {{ $receiver }} {
case {{ range $i, $e := $f.Enums }}{{ if ne $i 0 }},{{ end }}{{ $f.StructField }}{{ pascal $e }}{{ end }}:
return nil
default:
return fmt.Errorf("{{ $.Package }}: invalid enum value for {{ $f.Name }} field: %q", {{ $receiver }})
}
}
{{ end }}
}
{{ end }}
{{ template "meta/additional" $ }}
{{ end }}
{{/* A template that can be overrided in order to add additional code for the type package. */}}
{{/* A template that can be overridden in order to add additional code for the type package. */}}
{{ define "meta/additional" }}{{ end }}

View File

@@ -367,6 +367,17 @@ func (t Type) MutableFields() []*Field {
return fields
}
// EnumFields returns the types's enum fields.
func (t Type) EnumFields() []*Field {
var fields []*Field
for _, f := range t.Fields {
if f.IsEnum() {
fields = append(fields, f)
}
}
return fields
}
// NumM2M returns the type's many-to-many edge count
func (t Type) NumM2M() int {
var n int