@@ -45,18 +45,29 @@ func {{.enum.Name}}Values() []{{.enum.Name}} {
4545func (x {{.enum.Name }}) String() string {
4646 return string(x)
4747}
48+ {{- $parseNeeded := or .mustparse .marshal .anySQLEnabled .flag }}
49+ {{- $parseName := " Parse" }}
50+ {{- if and .noparse $parseNeeded }}
51+ {{- $parseName = " parse" }}
52+ {{- end }}
4853
4954// IsValid provides a quick way to determine if the typed value is
5055// part of the allowed enumerated values
5156func (x {{.enum.Name }}) IsValid() bool {
52- _, err := Parse{{.enum.Name }}(string(x))
57+ {{- if or (not .noparse ) $parseNeeded }}
58+ _, err := {{$parseName }}{{.enum.Name }}(string(x))
5359 return err == nil
60+ {{- else }}
61+ _, ok := _{{.enum.Name }}Value[string(x)]
62+ return ok
63+ {{- end }}
5464}
5565
5666var _{{.enum.Name }}Value = {{ unmapify .enum .lowercase }}
5767
58- // Parse{{.enum.Name }} attempts to convert a string to a {{.enum.Name }}.
59- func Parse{{.enum.Name }}(name string) ({{.enum.Name }}, error) {
68+ {{- if or (not .noparse ) $parseNeeded }}
69+ // {{$parseName }}{{.enum.Name }} attempts to convert a string to a {{.enum.Name }}.
70+ func {{$parseName }}{{.enum.Name }}(name string) ({{.enum.Name }}, error) {
6071 if x, ok := _{{.enum.Name }}Value[name]; ok {
6172 return x, nil
6273 }{{if .nocase }}
@@ -66,11 +77,16 @@ func Parse{{.enum.Name}}(name string) ({{.enum.Name}}, error) {
6677 }{{- end }}
6778 return {{.enum.Name }}(" " ), fmt.Errorf (" %s is %w " , name, ErrInvalid{{.enum.Name }})
6879}
80+ {{- end }}
6981
7082{{ if .mustparse }}
83+ {{- $parseName := " Parse" -}}
84+ {{- if .noparse -}}
85+ {{- $parseName = " parse" -}}
86+ {{- end }}
7187// MustParse{{.enum.Name }} converts a string to a {{.enum.Name }}, and panics if is not valid.
7288func MustParse{{.enum.Name }}(name string) {{.enum.Name }} {
73- val, err := Parse {{.enum.Name }}(name)
89+ val, err := {{ $parseName }} {{.enum.Name }}(name)
7490 if err != nil {
7591 panic(err)
7692 }
@@ -85,14 +101,18 @@ func (x {{.enum.Name}}) Ptr() *{{.enum.Name}} {
85101{{end }}
86102
87103{{ if .marshal }}
104+ {{- $parseName := " Parse" -}}
105+ {{- if .noparse -}}
106+ {{- $parseName = " parse" -}}
107+ {{- end }}
88108// MarshalText implements the text marshaller method.
89109func (x {{.enum.Name }}) MarshalText() ([]byte, error) {
90110 return []byte(string(x)), nil
91111}
92112
93113// UnmarshalText implements the text unmarshaller method.
94114func (x *{{.enum.Name }}) UnmarshalText(text []byte) error {
95- tmp, err := Parse {{.enum.Name }}(string(text))
115+ tmp, err := {{ $parseName }} {{.enum.Name }}(string(text))
96116 if err != nil {
97117 return err
98118 }
@@ -115,6 +135,10 @@ var err{{.enum.Name}}NilPtr = errors.New("value pointer is nil") // one per type
115135
116136{{/* SQL stored as a string value */ }}
117137{{ if or .sql .sqlnullstr }}
138+ {{- $parseName := " Parse" -}}
139+ {{- if .noparse -}}
140+ {{- $parseName = " parse" -}}
141+ {{- end }}
118142
119143// Scan implements the Scanner interface.
120144func (x *{{.enum.Name }}) Scan(value interface{}) (err error) {
@@ -127,9 +151,9 @@ func (x *{{.enum.Name}}) Scan(value interface{}) (err error) {
127151 // driver.Value values at the top of the list for expediency
128152 switch v := value. (type) {
129153 case string:
130- *x, err = Parse {{.enum.Name }}(v)
154+ *x, err = {{ $parseName }} {{.enum.Name }}(v)
131155 case []byte:
132- *x, err = Parse {{.enum.Name }}(string(v))
156+ *x, err = {{ $parseName }} {{.enum.Name }}(string(v))
133157 case {{.enum.Name }}:
134158 *x = v
135159 case *{{.enum.Name }}:
@@ -141,7 +165,7 @@ func (x *{{.enum.Name}}) Scan(value interface{}) (err error) {
141165 if v == nil {
142166 return err{{.enum.Name }}NilPtr
143167 }
144- *x, err = Parse {{.enum.Name }}(*v)
168+ *x, err = {{ $parseName }} {{.enum.Name }}(*v)
145169 default:
146170 return errors.New (" invalid type for {{.enum.Name}}" )
147171 }
@@ -157,6 +181,10 @@ func (x {{.enum.Name}}) Value() (driver.Value, error) {
157181
158182{{/* SQL stored as an integer value */ }}
159183{{ if or .sqlint .sqlnullint }}
184+ {{- $parseName := " Parse" -}}
185+ {{- if .noparse -}}
186+ {{- $parseName = " parse" -}}
187+ {{- end }}
160188var sqlInt{{.enum.Name }}Map = map[int64]{{.enum.Name }}{ {{ range $rIndex , $value := .enum.Values }}{{ if ne $value .Name " _" }}
161189{{ $value .ValueInt }}: {{ $value .PrefixedName }},{{end }}
162190{{- end }}
@@ -188,13 +216,13 @@ func (x *{{.enum.Name}}) Scan(value interface{}) (err error) {
188216 case int64:
189217 *x, err = lookupSqlInt{{.enum.Name }}(v)
190218 case string:
191- *x, err = Parse {{.enum.Name }}(v)
219+ *x, err = {{ $parseName }} {{.enum.Name }}(v)
192220 case []byte:
193221 if val, verr := strconv.ParseInt (string(v), 10, 64); verr == nil {
194222 *x, err = lookupSqlInt{{.enum.Name }}(val)
195223 } else {
196224 // try parsing the value as a string
197- *x, err = Parse {{.enum.Name }}(string(v))
225+ *x, err = {{ $parseName }} {{.enum.Name }}(string(v))
198226 }
199227 case {{.enum.Name }}:
200228 *x = v
@@ -240,7 +268,7 @@ func (x *{{.enum.Name}}) Scan(value interface{}) (err error) {
240268 if v == nil {
241269 return err{{.enum.Name }}NilPtr
242270 }
243- *x, err = Parse {{.enum.Name }}(*v)
271+ *x, err = {{ $parseName }} {{.enum.Name }}(*v)
244272 default:
245273 return errors.New (" invalid type for {{.enum.Name}}" )
246274 }
@@ -261,9 +289,13 @@ func (x {{.enum.Name}}) Value() (driver.Value, error) {
261289
262290
263291{{ if .flag }}
292+ {{- $parseName := " Parse" -}}
293+ {{- if .noparse -}}
294+ {{- $parseName = " parse" -}}
295+ {{- end }}
264296// Set implements the Golang flag.Value interface func.
265297func (x *{{.enum.Name }}) Set(val string) error {
266- v, err := Parse {{.enum.Name }}(val)
298+ v, err := {{ $parseName }} {{.enum.Name }}(val)
267299 *x = v
268300 return err
269301}
0 commit comments