mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
146 lines
4.8 KiB
Cheetah
146 lines
4.8 KiB
Cheetah
{{/*
|
|
Copyright 2019-present Facebook Inc. All rights reserved.
|
|
This source code is licensed under the Apache 2.0 license found
|
|
in the LICENSE file in the root directory of this source tree.
|
|
*/}}
|
|
|
|
{{ define "meta" }}
|
|
|
|
{{- with extend $ "Package" $.Package -}}
|
|
{{ template "header" . }}
|
|
{{ end }}
|
|
|
|
{{ template "import" $ }}
|
|
|
|
const (
|
|
// Label holds the string label denoting the {{ lower $.Name }} type in the database.
|
|
Label = "{{ $.Label }}"
|
|
// {{ $.ID.Constant }} holds the string denoting the id field in the database.
|
|
{{ $.ID.Constant }} = "{{ $.ID.StorageKey }}"
|
|
{{ range $_, $f := $.Fields -}}{{ $field := $f.Constant -}}
|
|
// {{ $field }} holds the string denoting the {{ lower $f.Name }} vertex property in the database.
|
|
{{ $field }} = "{{ $f.StorageKey }}"
|
|
{{ end -}}
|
|
{{ $tmpl := printf "dialect/%s/meta/constants" $.Storage }}
|
|
{{ xtemplate $tmpl $ }}
|
|
)
|
|
|
|
{{ $tmpl = printf "dialect/%s/meta/variables" $.Storage }}
|
|
{{ if hasTemplate $tmpl }}
|
|
{{ xtemplate $tmpl $ }}
|
|
{{ end }}
|
|
|
|
{{ if or $.HasDefault $.HasValidators }}
|
|
var (
|
|
{{- with $.MixedInWithDefaultOrValidator }}
|
|
mixin = {{ base $.Schema }}.{{ $.Name }}{}.Mixin()
|
|
mixinFields = [...][]ent.Field{
|
|
{{- range $i, $_ := xrange $.NumMixin }}
|
|
mixin[{{ $i }}].Fields(),
|
|
{{- end }}
|
|
}
|
|
{{- end }}
|
|
fields = {{ base $.Schema }}.{{ $.Name }}{}.Fields()
|
|
{{ range $i, $f := $.Fields -}}
|
|
{{- $desc := print "desc" $f.StructField -}}
|
|
{{- /* enum default values handled near their declarations. */}}
|
|
{{ if or (and $f.Default (not $f.IsEnum)) $f.UpdateDefault $f.Validators -}}
|
|
{{- if $f.Position.MixedIn }}
|
|
// {{ $desc }} is the schema descriptor for {{ $f.Name }} field.
|
|
{{ $desc }} = mixinFields[{{ $f.Position.MixinIndex }}][{{ $f.Position.Index }}].Descriptor()
|
|
{{- else }}
|
|
// {{ $desc }} is the schema descriptor for {{ $f.Name }} field.
|
|
{{ $desc }} = fields[{{ $f.Position.Index }}].Descriptor()
|
|
{{- end }}
|
|
{{ end -}}
|
|
{{ if and $f.Default (not $f.IsEnum) }}
|
|
{{- $default := $f.DefaultName -}}
|
|
// {{ $default }} holds the default value on creation for the {{ $f.Name }} field.
|
|
{{ $default }} = {{ $desc }}.Default.({{ if or $f.IsTime $f.IsUUID }}func() {{ end }}{{ $f.Type }})
|
|
{{ end -}}
|
|
{{ if $f.UpdateDefault }}
|
|
{{- $default := $f.UpdateDefaultName -}}
|
|
// {{ $default }} holds the default value on update for the {{ $f.Name }} field.
|
|
{{ $default }} = {{ $desc }}.UpdateDefault.({{ if $f.IsTime }}func() {{ end }}{{ $f.Type }})
|
|
{{ end -}}
|
|
{{ with $f.Validators -}}
|
|
{{ $name := $f.Validator -}}
|
|
{{ $type := printf "func (%s) error" $f.Type -}}
|
|
// {{ $name }} is a validator for the "{{ $f.Name }}" field. It is called by the builders before save.
|
|
{{ if eq $f.Validators 1 -}}
|
|
{{ $name }} = {{ $desc }}.Validators[0].({{ $type }})
|
|
{{ else -}}
|
|
{{ $name }} = func() {{ $type }} {
|
|
validators := {{ $desc }}.Validators
|
|
fns := [...]func({{ $f.Type }}) error {
|
|
{{- range $j, $n := xrange $f.Validators }}
|
|
validators[{{ $j }}].(func({{ $f.Type }}) error),
|
|
{{- end }}
|
|
}
|
|
return func({{ $f.BuilderField }} {{ $f.Type }}) error {
|
|
for _, fn := range fns {
|
|
if err := fn({{ $f.BuilderField }}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
}()
|
|
{{ end -}}
|
|
{{ end -}}
|
|
{{ end -}}
|
|
)
|
|
{{ 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
|
|
|
|
{{- 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 }}
|
|
)
|
|
|
|
func (s {{ $enum }}) String() string {
|
|
return string(s)
|
|
}
|
|
|
|
{{ $name := $f.Validator -}}
|
|
{{ $arg := receiver $f.BuilderField }}
|
|
// {{ $name }} is a validator for the "{{ $arg }}" field enum values. It is called by the builders before save.
|
|
func {{ $name }}({{ $arg }} {{ $enum }}) error {
|
|
switch {{ $arg }} {
|
|
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", {{ $arg }})
|
|
}
|
|
}
|
|
{{ end }}
|
|
{{ end }}
|
|
|
|
{{ template "meta/additional" $ }}
|
|
|
|
{{ end }}
|
|
|
|
{{/* A template that can be overrided in order to add additional code for the type package. */}}
|
|
{{ define "meta/additional" }}{{ end }}
|