Repository: abice/go-enum
Pull request #213 (2023-09-10 09:10:50)

Support of forceUpper option
In #212 I mentioned why I need option, so decided to implement it. It would be nice if you can merge my PR.  


- Added support of `—forceupper` option
- Updated README.md
- Added tests

alewkinr: @abice hello there!

Any chance you can review my PR? Thx

Patch:
diff --git a/.gitignore b/.gitignore
index 67a2dda..70019a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ coverage.out
 coverage.html
 
 dist/
+.idea/
\ No newline at end of file
diff --git a/README.md b/README.md
index d6b1f04..a736c57 100644
--- a/README.md
+++ b/README.md
@@ -161,6 +161,7 @@ GLOBAL OPTIONS:
    --alias value, -a value [ --alias value, -a value ]        Adds or replaces aliases for a non alphanumeric value that needs to be accounted for. [Format should be "key:value,key2:value2", or specify multiple entries, or both!]
    --mustparse                                                Adds a Must version of the Parse that will panic on failure. (default: false)
    --forcelower                                               Forces a camel cased comment to generate lowercased names. (default: false)
+   --forceupper                                               Forces a camel cased comment to generate uppercased names. (default: false)
    --nocomments                                               Removes auto generated comments.  If you add your own comments, these will still be created. (default: false)
    --buildtag value, -b value [ --buildtag value, -b value ]  Adds build tags to a generated enum file.
    --help, -h                                                 show help
diff --git a/example/force_upper.go b/example/force_upper.go
new file mode 100644
index 0000000..38e5ac3
--- /dev/null
+++ b/example/force_upper.go
@@ -0,0 +1,9 @@
+//go:generate ../bin/go-enum  --forceupper -b example
+
+package example
+
+// ENUM(
+// DataSwap,
+// BootNode,
+// )
+type ForceUpperType int
diff --git a/example/force_upper_enum.go b/example/force_upper_enum.go
new file mode 100644
index 0000000..44cd892
--- /dev/null
+++ b/example/force_upper_enum.go
@@ -0,0 +1,59 @@
+// Code generated by go-enum DO NOT EDIT.
+// Version: example
+// Revision: example
+// Build Date: example
+// Built By: example
+
+//go:build example
+// +build example
+
+package example
+
+import (
+	"errors"
+	"fmt"
+)
+
+const (
+	// ForceUpperTypeDataSwap is a ForceUpperType of type DataSwap.
+	ForceUpperTypeDataSwap ForceUpperType = iota
+	// ForceUpperTypeBootNode is a ForceUpperType of type BootNode.
+	ForceUpperTypeBootNode
+)
+
+var ErrInvalidForceUpperType = errors.New("not a valid ForceUpperType")
+
+const _ForceUpperTypeName = "DATASWAPBOOTNODE"
+
+var _ForceUpperTypeMap = map[ForceUpperType]string{
+	ForceUpperTypeDataSwap: _ForceUpperTypeName[0:8],
+	ForceUpperTypeBootNode: _ForceUpperTypeName[8:16],
+}
+
+// String implements the Stringer interface.
+func (x ForceUpperType) String() string {
+	if str, ok := _ForceUpperTypeMap[x]; ok {
+		return str
+	}
+	return fmt.Sprintf("ForceUpperType(%d)", x)
+}
+
+// IsValid provides a quick way to determine if the typed value is
+// part of the allowed enumerated values
+func (x ForceUpperType) IsValid() bool {
+	_, ok := _ForceUpperTypeMap[x]
+	return ok
+}
+
+var _ForceUpperTypeValue = map[string]ForceUpperType{
+	_ForceUpperTypeName[0:8]:  ForceUpperTypeDataSwap,
+	_ForceUpperTypeName[8:16]: ForceUpperTypeBootNode,
+}
+
+// ParseForceUpperType attempts to convert a string to a ForceUpperType.
+func ParseForceUpperType(name string) (ForceUpperType, error) {
+	if x, ok := _ForceUpperTypeValue[name]; ok {
+		return x, nil
+	}
+	return ForceUpperType(0), fmt.Errorf("%s is %w", name, ErrInvalidForceUpperType)
+}
diff --git a/generator/enum.tmpl b/generator/enum.tmpl
index 1d7528a..574acdc 100644
--- a/generator/enum.tmpl
+++ b/generator/enum.tmpl
@@ -341,7 +341,7 @@ func (n *Null{{.enum.Name}}Str) UnmarshalJSON(b []byte) error {
 
 
 {{- define "stringer"}}
-const _{{.enum.Name}}Name = "{{ stringify .enum .forcelower }}"
+	const _{{.enum.Name}}Name = "{{ stringify .enum .forcelower .forceupper }}"
 
 {{ if .names }}var _{{.enum.Name}}Names = {{namify .enum}}
 
diff --git a/generator/generator.go b/generator/generator.go
index e51000e..3b9fef4 100644
--- a/generator/generator.go
+++ b/generator/generator.go
@@ -53,6 +53,7 @@ type Generator struct {
 	ptr               bool
 	mustParse         bool
 	forceLower        bool
+	forceUpper        bool
 	noComments        bool
 	buildTags         []string
 }
@@ -205,6 +206,12 @@ func (g *Generator) WithForceLower() *Generator {
 	return g
 }
 
+// WithForceUpper is used to force enums names to upper case while keeping variable names the same.
+func (g *Generator) WithForceUpper() *Generator {
+	g.forceUpper = true
+	return g
+}
+
 // WithNoComments is used to remove auto generated comments from the enum.
 func (g *Generator) WithNoComments() *Generator {
 	g.noComments = true
@@ -323,6 +330,7 @@ func (g *Generator) Generate(f *ast.File) ([]byte, error) {
 			"sqlnullstr":    g.sqlNullStr,
 			"mustparse":     g.mustParse,
 			"forcelower":    g.forceLower,
+			"forceupper":    g.forceUpper,
 		}
 
 		templateName := "enum"
diff --git a/generator/template_funcs.go b/generator/template_funcs.go
index ebacd2b..8456666 100644
--- a/generator/template_funcs.go
+++ b/generator/template_funcs.go
@@ -7,13 +7,16 @@ import (
 )
 
 // Stringify returns a string that is all of the enum value names concatenated without a separator
-func Stringify(e Enum, forceLower bool) (ret string, err error) {
+func Stringify(e Enum, forceLower, forceUpper bool) (ret string, err error) {
 	for _, val := range e.Values {
 		if val.Name != skipHolder {
 			next := val.RawName
 			if forceLower {
 				next = strings.ToLower(next)
 			}
+			if forceUpper {
+				next = strings.ToUpper(next)
+			}
 			ret = ret + next
 		}
 	}
diff --git a/main.go b/main.go
index f023bd2..d57e3b7 100644
--- a/main.go
+++ b/main.go
@@ -40,6 +40,7 @@ type rootT struct {
 	BuildTags         cli.StringSlice
 	MustParse         bool
 	ForceLower        bool
+	ForceUpper        bool
 	NoComments        bool
 }
 
@@ -157,6 +158,11 @@ func main() {
 				Usage:       "Forces a camel cased comment to generate lowercased names.",
 				Destination: &argv.ForceLower,
 			},
+			&cli.BoolFlag{
+				Name:        "forceupper",
+				Usage:       "Forces a camel cased comment to generate uppercased names.",
+				Destination: &argv.ForceUpper,
+			},
 			&cli.BoolFlag{
 				Name:        "nocomments",
 				Usage:       "Removes auto generated comments.  If you add your own comments, these will still be created.",
@@ -231,6 +237,9 @@ func main() {
 				if argv.ForceLower {
 					g.WithForceLower()
 				}
+				if argv.ForceUpper {
+					g.WithForceUpper()
+				}
 				if argv.NoComments {
 					g.WithNoComments()
 				}


Test patch:
diff --git a/example/force_upper_test.go b/example/force_upper_test.go
new file mode 100644
index 0000000..6bd6bbc
--- /dev/null
+++ b/example/force_upper_test.go
@@ -0,0 +1,42 @@
+//go:build example
+// +build example
+
+package example
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestForceUpperString(t *testing.T) {
+	tests := map[string]struct {
+		input  string
+		output ForceUpperType
+	}{
+		"dataswap": {
+			input:  `DATASWAP`,
+			output: ForceUpperTypeDataSwap,
+		},
+		"bootnode": {
+			input:  `BOOTNODE`,
+			output: ForceUpperTypeBootNode,
+		},
+	}
+
+	for name, tc := range tests {
+		t.Run(name, func(t *testing.T) {
+			output, err := ParseForceUpperType(tc.input)
+			assert.NoError(t, err)
+			assert.Equal(t, tc.output, output)
+
+			assert.Equal(t, tc.input, output.String())
+		})
+	}
+
+	t.Run("failures", func(t *testing.T) {
+		assert.Equal(t, "ForceUpperType(99)", ForceUpperType(99).String())
+		_, err := ParseForceUpperType("-1")
+		assert.Error(t, err)
+	})
+}
diff --git a/generator/.snapshots/TestExampleFileMoreOptionsWithForceUpper b/generator/.snapshots/TestExampleFileMoreOptionsWithForceUpper
new file mode 100644
index 0000000..c1e7a86
--- /dev/null
+++ b/generator/.snapshots/TestExampleFileMoreOptionsWithForceUpper
@@ -0,0 +1,2525 @@
+([]string) (len=2523) {
+  (string) (len=41) "// Code generated by go-enum DO NOT EDIT.",
+  (string) (len=13) "// Version: -",
+  (string) (len=14) "// Revision: -",
+  (string) (len=16) "// Build Date: -",
+  (string) (len=14) "// Built By: -",
+  (string) "",
+  (string) (len=17) "package generator",
+  (string) "",
+  (string) (len=8) "import (",
+  (string) (len=22) "\t\"database/sql/driver\"",
+  (string) (len=9) "\t\"errors\"",
+  (string) (len=6) "\t\"fmt\"",
+  (string) (len=10) "\t\"strings\"",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=38) "\t// AnimalCat is a Animal of type Cat.",
+  (string) (len=24) "\tAnimalCat Animal = iota",
+  (string) (len=38) "\t// AnimalDog is a Animal of type Dog.",
+  (string) (len=10) "\tAnimalDog",
+  (string) (len=40) "\t// AnimalFish is a Animal of type Fish.",
+  (string) (len=11) "\tAnimalFish",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=99) "var ErrInvalidAnimal = fmt.Errorf(\"not a valid Animal, try [%s]\", strings.Join(_AnimalNames, \", \"))",
+  (string) "",
+  (string) (len=32) "const _AnimalName = \"CATDOGFISH\"",
+  (string) "",
+  (string) (len=28) "var _AnimalNames = []string{",
+  (string) (len=18) "\t_AnimalName[0:3],",
+  (string) (len=18) "\t_AnimalName[3:6],",
+  (string) (len=19) "\t_AnimalName[6:10],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// AnimalNames returns a list of possible string values of Animal.",
+  (string) (len=29) "func AnimalNames() []string {",
+  (string) (len=41) "\ttmp := make([]string, len(_AnimalNames))",
+  (string) (len=24) "\tcopy(tmp, _AnimalNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=35) "var _AnimalMap = map[Animal]string{",
+  (string) (len=30) "\tAnimalCat:  _AnimalName[0:3],",
+  (string) (len=30) "\tAnimalDog:  _AnimalName[3:6],",
+  (string) (len=31) "\tAnimalFish: _AnimalName[6:10],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=33) "func (x Animal) String() string {",
+  (string) (len=34) "\tif str, ok := _AnimalMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=36) "\treturn fmt.Sprintf(\"Animal(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=32) "func (x Animal) IsValid() bool {",
+  (string) (len=23) "\t_, ok := _AnimalMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=37) "var _AnimalValue = map[string]Animal{",
+  (string) (len=30) "\t_AnimalName[0:3]:  AnimalCat,",
+  (string) (len=30) "\t_AnimalName[3:6]:  AnimalDog,",
+  (string) (len=31) "\t_AnimalName[6:10]: AnimalFish,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=56) "// ParseAnimal attempts to convert a string to a Animal.",
+  (string) (len=47) "func ParseAnimal(name string) (Animal, error) {",
+  (string) (len=37) "\tif x, ok := _AnimalValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=65) "\treturn Animal(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidAnimal)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=77) "// MustParseAnimal converts a string to a Animal, and panics if is not valid.",
+  (string) (len=42) "func MustParseAnimal(name string) Animal {",
+  (string) (len=30) "\tval, err := ParseAnimal(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=47) "func (x Animal) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=51) "func (x *Animal) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=30) "\ttmp, err := ParseAnimal(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=92) "var errAnimalNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=54) "func (x *Animal) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=16) "\t\t*x = Animal(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=16) "\t\t*x = Animal(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=26) "\t\t*x, err = ParseAnimal(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=34) "\t\t*x, err = ParseAnimal(string(v))",
+  (string) (len=13) "\tcase Animal:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=16) "\t\t*x = Animal(v)",
+  (string) (len=14) "\tcase *Animal:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=16) "\t\t*x = Animal(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=16) "\t\t*x = Animal(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=17) "\t\t*x = Animal(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=17) "\t\t*x = Animal(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=16) "\t\t*x = Animal(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=17) "\t\t*x = Animal(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=17) "\t\t*x = Animal(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=17) "\t\t*x = Animal(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=25) "\t\t\treturn errAnimalNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x, err = ParseAnimal(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=47) "func (x Animal) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=32) "func ParseAnimalExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=38) "func ParseAnimalDescription() string {",
+  (string) (len=18) "\treturn `Animal x`",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=50) "\t// CasesTest_lower is a Cases of type Test_lower.",
+  (string) (len=29) "\tCasesTest_lower Cases = iota",
+  (string) (len=54) "\t// CasesTest_capital is a Cases of type Test_capital.",
+  (string) (len=18) "\tCasesTest_capital",
+  (string) (len=72) "\t// CasesAnotherLowerCaseStart is a Cases of type AnotherLowerCaseStart.",
+  (string) (len=27) "\tCasesAnotherLowerCaseStart",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=96) "var ErrInvalidCases = fmt.Errorf(\"not a valid Cases, try [%s]\", strings.Join(_CasesNames, \", \"))",
+  (string) "",
+  (string) (len=64) "const _CasesName = \"TEST_LOWERTEST_CAPITALANOTHERLOWERCASESTART\"",
+  (string) "",
+  (string) (len=27) "var _CasesNames = []string{",
+  (string) (len=18) "\t_CasesName[0:10],",
+  (string) (len=19) "\t_CasesName[10:22],",
+  (string) (len=19) "\t_CasesName[22:43],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// CasesNames returns a list of possible string values of Cases.",
+  (string) (len=28) "func CasesNames() []string {",
+  (string) (len=40) "\ttmp := make([]string, len(_CasesNames))",
+  (string) (len=23) "\tcopy(tmp, _CasesNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=33) "var _CasesMap = map[Cases]string{",
+  (string) (len=46) "\tCasesTest_lower:            _CasesName[0:10],",
+  (string) (len=47) "\tCasesTest_capital:          _CasesName[10:22],",
+  (string) (len=47) "\tCasesAnotherLowerCaseStart: _CasesName[22:43],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=32) "func (x Cases) String() string {",
+  (string) (len=33) "\tif str, ok := _CasesMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=35) "\treturn fmt.Sprintf(\"Cases(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=31) "func (x Cases) IsValid() bool {",
+  (string) (len=22) "\t_, ok := _CasesMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=35) "var _CasesValue = map[string]Cases{",
+  (string) (len=36) "\t_CasesName[0:10]:  CasesTest_lower,",
+  (string) (len=38) "\t_CasesName[10:22]: CasesTest_capital,",
+  (string) (len=47) "\t_CasesName[22:43]: CasesAnotherLowerCaseStart,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=54) "// ParseCases attempts to convert a string to a Cases.",
+  (string) (len=45) "func ParseCases(name string) (Cases, error) {",
+  (string) (len=36) "\tif x, ok := _CasesValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=63) "\treturn Cases(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidCases)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=75) "// MustParseCases converts a string to a Cases, and panics if is not valid.",
+  (string) (len=40) "func MustParseCases(name string) Cases {",
+  (string) (len=29) "\tval, err := ParseCases(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=46) "func (x Cases) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=50) "func (x *Cases) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=29) "\ttmp, err := ParseCases(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=91) "var errCasesNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=53) "func (x *Cases) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=15) "\t\t*x = Cases(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=15) "\t\t*x = Cases(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=25) "\t\t*x, err = ParseCases(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=33) "\t\t*x, err = ParseCases(string(v))",
+  (string) (len=12) "\tcase Cases:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=15) "\t\t*x = Cases(v)",
+  (string) (len=13) "\tcase *Cases:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=15) "\t\t*x = Cases(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=15) "\t\t*x = Cases(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Cases(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Cases(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\t*x = Cases(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Cases(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Cases(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Cases(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errCasesNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=26) "\t\t*x, err = ParseCases(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=46) "func (x Cases) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=31) "func ParseCasesExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=37) "func ParseCasesDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=40) "\t// ColorBlack is a Color of type Black.",
+  (string) (len=24) "\tColorBlack Color = iota",
+  (string) (len=40) "\t// ColorWhite is a Color of type White.",
+  (string) (len=11) "\tColorWhite",
+  (string) (len=36) "\t// ColorRed is a Color of type Red.",
+  (string) (len=9) "\tColorRed",
+  (string) (len=40) "\t// ColorGreen is a Color of type Green.",
+  (string) (len=11) "\tColorGreen",
+  (string) (len=38) "\t// ColorBlue is a Color of type Blue.",
+  (string) (len=28) "\tColorBlue Color = iota + 29",
+  (string) (len=38) "\t// ColorGrey is a Color of type Grey.",
+  (string) (len=10) "\tColorGrey",
+  (string) (len=42) "\t// ColorYellow is a Color of type Yellow.",
+  (string) (len=12) "\tColorYellow",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=96) "var ErrInvalidColor = fmt.Errorf(\"not a valid Color, try [%s]\", strings.Join(_ColorNames, \", \"))",
+  (string) "",
+  (string) (len=53) "const _ColorName = \"BLACKWHITEREDGREENBLUEGREYYELLOW\"",
+  (string) "",
+  (string) (len=27) "var _ColorNames = []string{",
+  (string) (len=17) "\t_ColorName[0:5],",
+  (string) (len=18) "\t_ColorName[5:10],",
+  (string) (len=19) "\t_ColorName[10:13],",
+  (string) (len=19) "\t_ColorName[13:18],",
+  (string) (len=19) "\t_ColorName[18:22],",
+  (string) (len=19) "\t_ColorName[22:26],",
+  (string) (len=19) "\t_ColorName[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// ColorNames returns a list of possible string values of Color.",
+  (string) (len=28) "func ColorNames() []string {",
+  (string) (len=40) "\ttmp := make([]string, len(_ColorNames))",
+  (string) (len=23) "\tcopy(tmp, _ColorNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=33) "var _ColorMap = map[Color]string{",
+  (string) (len=30) "\tColorBlack:  _ColorName[0:5],",
+  (string) (len=31) "\tColorWhite:  _ColorName[5:10],",
+  (string) (len=32) "\tColorRed:    _ColorName[10:13],",
+  (string) (len=32) "\tColorGreen:  _ColorName[13:18],",
+  (string) (len=32) "\tColorBlue:   _ColorName[18:22],",
+  (string) (len=32) "\tColorGrey:   _ColorName[22:26],",
+  (string) (len=32) "\tColorYellow: _ColorName[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=32) "func (x Color) String() string {",
+  (string) (len=33) "\tif str, ok := _ColorMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=35) "\treturn fmt.Sprintf(\"Color(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=31) "func (x Color) IsValid() bool {",
+  (string) (len=22) "\t_, ok := _ColorMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=35) "var _ColorValue = map[string]Color{",
+  (string) (len=31) "\t_ColorName[0:5]:   ColorBlack,",
+  (string) (len=31) "\t_ColorName[5:10]:  ColorWhite,",
+  (string) (len=29) "\t_ColorName[10:13]: ColorRed,",
+  (string) (len=31) "\t_ColorName[13:18]: ColorGreen,",
+  (string) (len=30) "\t_ColorName[18:22]: ColorBlue,",
+  (string) (len=30) "\t_ColorName[22:26]: ColorGrey,",
+  (string) (len=32) "\t_ColorName[26:32]: ColorYellow,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=54) "// ParseColor attempts to convert a string to a Color.",
+  (string) (len=45) "func ParseColor(name string) (Color, error) {",
+  (string) (len=36) "\tif x, ok := _ColorValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=63) "\treturn Color(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidColor)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=75) "// MustParseColor converts a string to a Color, and panics if is not valid.",
+  (string) (len=40) "func MustParseColor(name string) Color {",
+  (string) (len=29) "\tval, err := ParseColor(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=46) "func (x Color) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=50) "func (x *Color) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=29) "\ttmp, err := ParseColor(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=91) "var errColorNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=53) "func (x *Color) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=15) "\t\t*x = Color(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=15) "\t\t*x = Color(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=25) "\t\t*x, err = ParseColor(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=33) "\t\t*x, err = ParseColor(string(v))",
+  (string) (len=12) "\tcase Color:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=15) "\t\t*x = Color(v)",
+  (string) (len=13) "\tcase *Color:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=15) "\t\t*x = Color(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=15) "\t\t*x = Color(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Color(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Color(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\t*x = Color(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Color(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Color(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Color(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errColorNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=26) "\t\t*x, err = ParseColor(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=46) "func (x Color) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=31) "func ParseColorExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=37) "func ParseColorDescription() string {",
+  (string) (len=61) "\treturn `Color is an enumeration of colors that are allowed.`",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=62) "\t// ColorWithCommentBlack is a ColorWithComment of type Black.",
+  (string) (len=46) "\tColorWithCommentBlack ColorWithComment = iota",
+  (string) (len=62) "\t// ColorWithCommentWhite is a ColorWithComment of type White.",
+  (string) (len=22) "\tColorWithCommentWhite",
+  (string) (len=58) "\t// ColorWithCommentRed is a ColorWithComment of type Red.",
+  (string) (len=20) "\tColorWithCommentRed",
+  (string) (len=62) "\t// ColorWithCommentGreen is a ColorWithComment of type Green.",
+  (string) (len=22) "\tColorWithCommentGreen",
+  (string) (len=60) "\t// ColorWithCommentBlue is a ColorWithComment of type Blue.",
+  (string) (len=24) "\t// Blue starts with 33.",
+  (string) (len=50) "\tColorWithCommentBlue ColorWithComment = iota + 29",
+  (string) (len=60) "\t// ColorWithCommentGrey is a ColorWithComment of type Grey.",
+  (string) (len=21) "\tColorWithCommentGrey",
+  (string) (len=64) "\t// ColorWithCommentYellow is a ColorWithComment of type Yellow.",
+  (string) (len=23) "\tColorWithCommentYellow",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=129) "var ErrInvalidColorWithComment = fmt.Errorf(\"not a valid ColorWithComment, try [%s]\", strings.Join(_ColorWithCommentNames, \", \"))",
+  (string) "",
+  (string) (len=64) "const _ColorWithCommentName = \"BLACKWHITEREDGREENBLUEGREYYELLOW\"",
+  (string) "",
+  (string) (len=38) "var _ColorWithCommentNames = []string{",
+  (string) (len=28) "\t_ColorWithCommentName[0:5],",
+  (string) (len=29) "\t_ColorWithCommentName[5:10],",
+  (string) (len=30) "\t_ColorWithCommentName[10:13],",
+  (string) (len=30) "\t_ColorWithCommentName[13:18],",
+  (string) (len=30) "\t_ColorWithCommentName[18:22],",
+  (string) (len=30) "\t_ColorWithCommentName[22:26],",
+  (string) (len=30) "\t_ColorWithCommentName[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=86) "// ColorWithCommentNames returns a list of possible string values of ColorWithComment.",
+  (string) (len=39) "func ColorWithCommentNames() []string {",
+  (string) (len=51) "\ttmp := make([]string, len(_ColorWithCommentNames))",
+  (string) (len=34) "\tcopy(tmp, _ColorWithCommentNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=55) "var _ColorWithCommentMap = map[ColorWithComment]string{",
+  (string) (len=52) "\tColorWithCommentBlack:  _ColorWithCommentName[0:5],",
+  (string) (len=53) "\tColorWithCommentWhite:  _ColorWithCommentName[5:10],",
+  (string) (len=54) "\tColorWithCommentRed:    _ColorWithCommentName[10:13],",
+  (string) (len=54) "\tColorWithCommentGreen:  _ColorWithCommentName[13:18],",
+  (string) (len=54) "\tColorWithCommentBlue:   _ColorWithCommentName[18:22],",
+  (string) (len=54) "\tColorWithCommentGrey:   _ColorWithCommentName[22:26],",
+  (string) (len=54) "\tColorWithCommentYellow: _ColorWithCommentName[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=43) "func (x ColorWithComment) String() string {",
+  (string) (len=44) "\tif str, ok := _ColorWithCommentMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=46) "\treturn fmt.Sprintf(\"ColorWithComment(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=42) "func (x ColorWithComment) IsValid() bool {",
+  (string) (len=33) "\t_, ok := _ColorWithCommentMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "var _ColorWithCommentValue = map[string]ColorWithComment{",
+  (string) (len=53) "\t_ColorWithCommentName[0:5]:   ColorWithCommentBlack,",
+  (string) (len=53) "\t_ColorWithCommentName[5:10]:  ColorWithCommentWhite,",
+  (string) (len=51) "\t_ColorWithCommentName[10:13]: ColorWithCommentRed,",
+  (string) (len=53) "\t_ColorWithCommentName[13:18]: ColorWithCommentGreen,",
+  (string) (len=52) "\t_ColorWithCommentName[18:22]: ColorWithCommentBlue,",
+  (string) (len=52) "\t_ColorWithCommentName[22:26]: ColorWithCommentGrey,",
+  (string) (len=54) "\t_ColorWithCommentName[26:32]: ColorWithCommentYellow,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=76) "// ParseColorWithComment attempts to convert a string to a ColorWithComment.",
+  (string) (len=67) "func ParseColorWithComment(name string) (ColorWithComment, error) {",
+  (string) (len=47) "\tif x, ok := _ColorWithCommentValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=85) "\treturn ColorWithComment(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidColorWithComment)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=97) "// MustParseColorWithComment converts a string to a ColorWithComment, and panics if is not valid.",
+  (string) (len=62) "func MustParseColorWithComment(name string) ColorWithComment {",
+  (string) (len=40) "\tval, err := ParseColorWithComment(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=57) "func (x ColorWithComment) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=61) "func (x *ColorWithComment) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=40) "\ttmp, err := ParseColorWithComment(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=102) "var errColorWithCommentNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=64) "func (x *ColorWithComment) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=26) "\t\t*x = ColorWithComment(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=26) "\t\t*x = ColorWithComment(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=36) "\t\t*x, err = ParseColorWithComment(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=44) "\t\t*x, err = ParseColorWithComment(string(v))",
+  (string) (len=23) "\tcase ColorWithComment:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=26) "\t\t*x = ColorWithComment(v)",
+  (string) (len=24) "\tcase *ColorWithComment:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=26) "\t\t*x = ColorWithComment(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=26) "\t\t*x = ColorWithComment(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x = ColorWithComment(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x = ColorWithComment(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=26) "\t\t*x = ColorWithComment(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x = ColorWithComment(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x = ColorWithComment(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=27) "\t\t*x = ColorWithComment(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=35) "\t\t\treturn errColorWithCommentNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=37) "\t\t*x, err = ParseColorWithComment(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=57) "func (x ColorWithComment) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=42) "func ParseColorWithCommentExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=48) "func ParseColorWithCommentDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=64) "\t// ColorWithComment2Black is a ColorWithComment2 of type Black.",
+  (string) (len=48) "\tColorWithComment2Black ColorWithComment2 = iota",
+  (string) (len=64) "\t// ColorWithComment2White is a ColorWithComment2 of type White.",
+  (string) (len=23) "\tColorWithComment2White",
+  (string) (len=60) "\t// ColorWithComment2Red is a ColorWithComment2 of type Red.",
+  (string) (len=21) "\tColorWithComment2Red",
+  (string) (len=64) "\t// ColorWithComment2Green is a ColorWithComment2 of type Green.",
+  (string) (len=23) "\tColorWithComment2Green",
+  (string) (len=62) "\t// ColorWithComment2Blue is a ColorWithComment2 of type Blue.",
+  (string) (len=23) "\t// Blue starts with 33",
+  (string) (len=52) "\tColorWithComment2Blue ColorWithComment2 = iota + 29",
+  (string) (len=62) "\t// ColorWithComment2Grey is a ColorWithComment2 of type Grey.",
+  (string) (len=22) "\tColorWithComment2Grey",
+  (string) (len=66) "\t// ColorWithComment2Yellow is a ColorWithComment2 of type Yellow.",
+  (string) (len=24) "\tColorWithComment2Yellow",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=132) "var ErrInvalidColorWithComment2 = fmt.Errorf(\"not a valid ColorWithComment2, try [%s]\", strings.Join(_ColorWithComment2Names, \", \"))",
+  (string) "",
+  (string) (len=65) "const _ColorWithComment2Name = \"BLACKWHITEREDGREENBLUEGREYYELLOW\"",
+  (string) "",
+  (string) (len=39) "var _ColorWithComment2Names = []string{",
+  (string) (len=29) "\t_ColorWithComment2Name[0:5],",
+  (string) (len=30) "\t_ColorWithComment2Name[5:10],",
+  (string) (len=31) "\t_ColorWithComment2Name[10:13],",
+  (string) (len=31) "\t_ColorWithComment2Name[13:18],",
+  (string) (len=31) "\t_ColorWithComment2Name[18:22],",
+  (string) (len=31) "\t_ColorWithComment2Name[22:26],",
+  (string) (len=31) "\t_ColorWithComment2Name[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=88) "// ColorWithComment2Names returns a list of possible string values of ColorWithComment2.",
+  (string) (len=40) "func ColorWithComment2Names() []string {",
+  (string) (len=52) "\ttmp := make([]string, len(_ColorWithComment2Names))",
+  (string) (len=35) "\tcopy(tmp, _ColorWithComment2Names)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "var _ColorWithComment2Map = map[ColorWithComment2]string{",
+  (string) (len=54) "\tColorWithComment2Black:  _ColorWithComment2Name[0:5],",
+  (string) (len=55) "\tColorWithComment2White:  _ColorWithComment2Name[5:10],",
+  (string) (len=56) "\tColorWithComment2Red:    _ColorWithComment2Name[10:13],",
+  (string) (len=56) "\tColorWithComment2Green:  _ColorWithComment2Name[13:18],",
+  (string) (len=56) "\tColorWithComment2Blue:   _ColorWithComment2Name[18:22],",
+  (string) (len=56) "\tColorWithComment2Grey:   _ColorWithComment2Name[22:26],",
+  (string) (len=56) "\tColorWithComment2Yellow: _ColorWithComment2Name[26:32],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=44) "func (x ColorWithComment2) String() string {",
+  (string) (len=45) "\tif str, ok := _ColorWithComment2Map[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=47) "\treturn fmt.Sprintf(\"ColorWithComment2(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=43) "func (x ColorWithComment2) IsValid() bool {",
+  (string) (len=34) "\t_, ok := _ColorWithComment2Map[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=59) "var _ColorWithComment2Value = map[string]ColorWithComment2{",
+  (string) (len=55) "\t_ColorWithComment2Name[0:5]:   ColorWithComment2Black,",
+  (string) (len=55) "\t_ColorWithComment2Name[5:10]:  ColorWithComment2White,",
+  (string) (len=53) "\t_ColorWithComment2Name[10:13]: ColorWithComment2Red,",
+  (string) (len=55) "\t_ColorWithComment2Name[13:18]: ColorWithComment2Green,",
+  (string) (len=54) "\t_ColorWithComment2Name[18:22]: ColorWithComment2Blue,",
+  (string) (len=54) "\t_ColorWithComment2Name[22:26]: ColorWithComment2Grey,",
+  (string) (len=56) "\t_ColorWithComment2Name[26:32]: ColorWithComment2Yellow,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=78) "// ParseColorWithComment2 attempts to convert a string to a ColorWithComment2.",
+  (string) (len=69) "func ParseColorWithComment2(name string) (ColorWithComment2, error) {",
+  (string) (len=48) "\tif x, ok := _ColorWithComment2Value[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=87) "\treturn ColorWithComment2(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidColorWithComment2)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=99) "// MustParseColorWithComment2 converts a string to a ColorWithComment2, and panics if is not valid.",
+  (string) (len=64) "func MustParseColorWithComment2(name string) ColorWithComment2 {",
+  (string) (len=41) "\tval, err := ParseColorWithComment2(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=58) "func (x ColorWithComment2) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=62) "func (x *ColorWithComment2) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=41) "\ttmp, err := ParseColorWithComment2(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=103) "var errColorWithComment2NilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=65) "func (x *ColorWithComment2) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=27) "\t\t*x = ColorWithComment2(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=27) "\t\t*x = ColorWithComment2(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=37) "\t\t*x, err = ParseColorWithComment2(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=45) "\t\t*x, err = ParseColorWithComment2(string(v))",
+  (string) (len=24) "\tcase ColorWithComment2:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=27) "\t\t*x = ColorWithComment2(v)",
+  (string) (len=25) "\tcase *ColorWithComment2:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=27) "\t\t*x = ColorWithComment2(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=27) "\t\t*x = ColorWithComment2(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment2(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment2(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=27) "\t\t*x = ColorWithComment2(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment2(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment2(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment2(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment2NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=38) "\t\t*x, err = ParseColorWithComment2(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=58) "func (x ColorWithComment2) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=43) "func ParseColorWithComment2Example() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=49) "func ParseColorWithComment2Description() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=64) "\t// ColorWithComment3Black is a ColorWithComment3 of type Black.",
+  (string) (len=48) "\tColorWithComment3Black ColorWithComment3 = iota",
+  (string) (len=64) "\t// ColorWithComment3White is a ColorWithComment3 of type White.",
+  (string) (len=23) "\tColorWithComment3White",
+  (string) (len=60) "\t// ColorWithComment3Red is a ColorWithComment3 of type Red.",
+  (string) (len=21) "\tColorWithComment3Red",
+  (string) (len=64) "\t// ColorWithComment3Green is a ColorWithComment3 of type Green.",
+  (string) (len=24) "\t// Green starts with 33",
+  (string) (len=53) "\tColorWithComment3Green ColorWithComment3 = iota + 30",
+  (string) (len=62) "\t// ColorWithComment3Blue is a ColorWithComment3 of type Blue.",
+  (string) (len=22) "\tColorWithComment3Blue",
+  (string) (len=62) "\t// ColorWithComment3Grey is a ColorWithComment3 of type Grey.",
+  (string) (len=22) "\tColorWithComment3Grey",
+  (string) (len=66) "\t// ColorWithComment3Yellow is a ColorWithComment3 of type Yellow.",
+  (string) (len=24) "\tColorWithComment3Yellow",
+  (string) (len=73) "\t// ColorWithComment3BlueGreen is a ColorWithComment3 of type Blue-Green.",
+  (string) (len=22) "\t// blue-green comment",
+  (string) (len=27) "\tColorWithComment3BlueGreen",
+  (string) (len=73) "\t// ColorWithComment3RedOrange is a ColorWithComment3 of type Red-Orange.",
+  (string) (len=27) "\tColorWithComment3RedOrange",
+  (string) (len=82) "\t// ColorWithComment3RedOrangeBlue is a ColorWithComment3 of type Red-Orange-Blue.",
+  (string) (len=31) "\tColorWithComment3RedOrangeBlue",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=132) "var ErrInvalidColorWithComment3 = fmt.Errorf(\"not a valid ColorWithComment3, try [%s]\", strings.Join(_ColorWithComment3Names, \", \"))",
+  (string) "",
+  (string) (len=100) "const _ColorWithComment3Name = \"BLACKWHITEREDGREENBLUEGREYYELLOWBLUE-GREENRED-ORANGERED-ORANGE-BLUE\"",
+  (string) "",
+  (string) (len=39) "var _ColorWithComment3Names = []string{",
+  (string) (len=29) "\t_ColorWithComment3Name[0:5],",
+  (string) (len=30) "\t_ColorWithComment3Name[5:10],",
+  (string) (len=31) "\t_ColorWithComment3Name[10:13],",
+  (string) (len=31) "\t_ColorWithComment3Name[13:18],",
+  (string) (len=31) "\t_ColorWithComment3Name[18:22],",
+  (string) (len=31) "\t_ColorWithComment3Name[22:26],",
+  (string) (len=31) "\t_ColorWithComment3Name[26:32],",
+  (string) (len=31) "\t_ColorWithComment3Name[32:42],",
+  (string) (len=31) "\t_ColorWithComment3Name[42:52],",
+  (string) (len=31) "\t_ColorWithComment3Name[52:67],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=88) "// ColorWithComment3Names returns a list of possible string values of ColorWithComment3.",
+  (string) (len=40) "func ColorWithComment3Names() []string {",
+  (string) (len=52) "\ttmp := make([]string, len(_ColorWithComment3Names))",
+  (string) (len=35) "\tcopy(tmp, _ColorWithComment3Names)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "var _ColorWithComment3Map = map[ColorWithComment3]string{",
+  (string) (len=61) "\tColorWithComment3Black:         _ColorWithComment3Name[0:5],",
+  (string) (len=62) "\tColorWithComment3White:         _ColorWithComment3Name[5:10],",
+  (string) (len=63) "\tColorWithComment3Red:           _ColorWithComment3Name[10:13],",
+  (string) (len=63) "\tColorWithComment3Green:         _ColorWithComment3Name[13:18],",
+  (string) (len=63) "\tColorWithComment3Blue:          _ColorWithComment3Name[18:22],",
+  (string) (len=63) "\tColorWithComment3Grey:          _ColorWithComment3Name[22:26],",
+  (string) (len=63) "\tColorWithComment3Yellow:        _ColorWithComment3Name[26:32],",
+  (string) (len=63) "\tColorWithComment3BlueGreen:     _ColorWithComment3Name[32:42],",
+  (string) (len=63) "\tColorWithComment3RedOrange:     _ColorWithComment3Name[42:52],",
+  (string) (len=63) "\tColorWithComment3RedOrangeBlue: _ColorWithComment3Name[52:67],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=44) "func (x ColorWithComment3) String() string {",
+  (string) (len=45) "\tif str, ok := _ColorWithComment3Map[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=47) "\treturn fmt.Sprintf(\"ColorWithComment3(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=43) "func (x ColorWithComment3) IsValid() bool {",
+  (string) (len=34) "\t_, ok := _ColorWithComment3Map[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=59) "var _ColorWithComment3Value = map[string]ColorWithComment3{",
+  (string) (len=55) "\t_ColorWithComment3Name[0:5]:   ColorWithComment3Black,",
+  (string) (len=55) "\t_ColorWithComment3Name[5:10]:  ColorWithComment3White,",
+  (string) (len=53) "\t_ColorWithComment3Name[10:13]: ColorWithComment3Red,",
+  (string) (len=55) "\t_ColorWithComment3Name[13:18]: ColorWithComment3Green,",
+  (string) (len=54) "\t_ColorWithComment3Name[18:22]: ColorWithComment3Blue,",
+  (string) (len=54) "\t_ColorWithComment3Name[22:26]: ColorWithComment3Grey,",
+  (string) (len=56) "\t_ColorWithComment3Name[26:32]: ColorWithComment3Yellow,",
+  (string) (len=59) "\t_ColorWithComment3Name[32:42]: ColorWithComment3BlueGreen,",
+  (string) (len=59) "\t_ColorWithComment3Name[42:52]: ColorWithComment3RedOrange,",
+  (string) (len=63) "\t_ColorWithComment3Name[52:67]: ColorWithComment3RedOrangeBlue,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=78) "// ParseColorWithComment3 attempts to convert a string to a ColorWithComment3.",
+  (string) (len=69) "func ParseColorWithComment3(name string) (ColorWithComment3, error) {",
+  (string) (len=48) "\tif x, ok := _ColorWithComment3Value[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=87) "\treturn ColorWithComment3(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidColorWithComment3)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=99) "// MustParseColorWithComment3 converts a string to a ColorWithComment3, and panics if is not valid.",
+  (string) (len=64) "func MustParseColorWithComment3(name string) ColorWithComment3 {",
+  (string) (len=41) "\tval, err := ParseColorWithComment3(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=58) "func (x ColorWithComment3) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=62) "func (x *ColorWithComment3) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=41) "\ttmp, err := ParseColorWithComment3(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=103) "var errColorWithComment3NilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=65) "func (x *ColorWithComment3) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=27) "\t\t*x = ColorWithComment3(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=27) "\t\t*x = ColorWithComment3(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=37) "\t\t*x, err = ParseColorWithComment3(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=45) "\t\t*x, err = ParseColorWithComment3(string(v))",
+  (string) (len=24) "\tcase ColorWithComment3:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=27) "\t\t*x = ColorWithComment3(v)",
+  (string) (len=25) "\tcase *ColorWithComment3:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=27) "\t\t*x = ColorWithComment3(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=27) "\t\t*x = ColorWithComment3(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment3(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment3(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=27) "\t\t*x = ColorWithComment3(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment3(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment3(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment3(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment3NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=38) "\t\t*x, err = ParseColorWithComment3(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=58) "func (x ColorWithComment3) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=43) "func ParseColorWithComment3Example() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=49) "func ParseColorWithComment3Description() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=18) "\t// Skipped value.",
+  (string) (len=15) "\t// Placeholder",
+  (string) (len=27) "\t_ ColorWithComment4 = iota",
+  (string) (len=64) "\t// ColorWithComment4Black is a ColorWithComment4 of type Black.",
+  (string) (len=23) "\tColorWithComment4Black",
+  (string) (len=64) "\t// ColorWithComment4White is a ColorWithComment4 of type White.",
+  (string) (len=23) "\tColorWithComment4White",
+  (string) (len=60) "\t// ColorWithComment4Red is a ColorWithComment4 of type Red.",
+  (string) (len=21) "\tColorWithComment4Red",
+  (string) (len=64) "\t// ColorWithComment4Green is a ColorWithComment4 of type Green.",
+  (string) (len=24) "\t// Green starts with 33",
+  (string) (len=53) "\tColorWithComment4Green ColorWithComment4 = iota + 29",
+  (string) (len=62) "\t// ColorWithComment4Blue is a ColorWithComment4 of type Blue.",
+  (string) (len=22) "\tColorWithComment4Blue",
+  (string) (len=62) "\t// ColorWithComment4Grey is a ColorWithComment4 of type Grey.",
+  (string) (len=22) "\tColorWithComment4Grey",
+  (string) (len=66) "\t// ColorWithComment4Yellow is a ColorWithComment4 of type Yellow.",
+  (string) (len=110) "\t// Where did all the (somewhat) bad fish go? (something else that goes in parentheses at the end of the line)",
+  (string) (len=24) "\tColorWithComment4Yellow",
+  (string) (len=73) "\t// ColorWithComment4BlueGreen is a ColorWithComment4 of type Blue-Green.",
+  (string) (len=22) "\t// blue-green comment",
+  (string) (len=27) "\tColorWithComment4BlueGreen",
+  (string) (len=73) "\t// ColorWithComment4RedOrange is a ColorWithComment4 of type Red-Orange.",
+  (string) (len=20) "\t// has a , in it!?!",
+  (string) (len=27) "\tColorWithComment4RedOrange",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=132) "var ErrInvalidColorWithComment4 = fmt.Errorf(\"not a valid ColorWithComment4, try [%s]\", strings.Join(_ColorWithComment4Names, \", \"))",
+  (string) "",
+  (string) (len=85) "const _ColorWithComment4Name = \"BLACKWHITEREDGREENBLUEGREYYELLOWBLUE-GREENRED-ORANGE\"",
+  (string) "",
+  (string) (len=39) "var _ColorWithComment4Names = []string{",
+  (string) (len=29) "\t_ColorWithComment4Name[0:5],",
+  (string) (len=30) "\t_ColorWithComment4Name[5:10],",
+  (string) (len=31) "\t_ColorWithComment4Name[10:13],",
+  (string) (len=31) "\t_ColorWithComment4Name[13:18],",
+  (string) (len=31) "\t_ColorWithComment4Name[18:22],",
+  (string) (len=31) "\t_ColorWithComment4Name[22:26],",
+  (string) (len=31) "\t_ColorWithComment4Name[26:32],",
+  (string) (len=31) "\t_ColorWithComment4Name[32:42],",
+  (string) (len=31) "\t_ColorWithComment4Name[42:52],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=88) "// ColorWithComment4Names returns a list of possible string values of ColorWithComment4.",
+  (string) (len=40) "func ColorWithComment4Names() []string {",
+  (string) (len=52) "\ttmp := make([]string, len(_ColorWithComment4Names))",
+  (string) (len=35) "\tcopy(tmp, _ColorWithComment4Names)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "var _ColorWithComment4Map = map[ColorWithComment4]string{",
+  (string) (len=57) "\tColorWithComment4Black:     _ColorWithComment4Name[0:5],",
+  (string) (len=58) "\tColorWithComment4White:     _ColorWithComment4Name[5:10],",
+  (string) (len=59) "\tColorWithComment4Red:       _ColorWithComment4Name[10:13],",
+  (string) (len=59) "\tColorWithComment4Green:     _ColorWithComment4Name[13:18],",
+  (string) (len=59) "\tColorWithComment4Blue:      _ColorWithComment4Name[18:22],",
+  (string) (len=59) "\tColorWithComment4Grey:      _ColorWithComment4Name[22:26],",
+  (string) (len=59) "\tColorWithComment4Yellow:    _ColorWithComment4Name[26:32],",
+  (string) (len=59) "\tColorWithComment4BlueGreen: _ColorWithComment4Name[32:42],",
+  (string) (len=59) "\tColorWithComment4RedOrange: _ColorWithComment4Name[42:52],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=44) "func (x ColorWithComment4) String() string {",
+  (string) (len=45) "\tif str, ok := _ColorWithComment4Map[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=47) "\treturn fmt.Sprintf(\"ColorWithComment4(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=43) "func (x ColorWithComment4) IsValid() bool {",
+  (string) (len=34) "\t_, ok := _ColorWithComment4Map[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=59) "var _ColorWithComment4Value = map[string]ColorWithComment4{",
+  (string) (len=55) "\t_ColorWithComment4Name[0:5]:   ColorWithComment4Black,",
+  (string) (len=55) "\t_ColorWithComment4Name[5:10]:  ColorWithComment4White,",
+  (string) (len=53) "\t_ColorWithComment4Name[10:13]: ColorWithComment4Red,",
+  (string) (len=55) "\t_ColorWithComment4Name[13:18]: ColorWithComment4Green,",
+  (string) (len=54) "\t_ColorWithComment4Name[18:22]: ColorWithComment4Blue,",
+  (string) (len=54) "\t_ColorWithComment4Name[22:26]: ColorWithComment4Grey,",
+  (string) (len=56) "\t_ColorWithComment4Name[26:32]: ColorWithComment4Yellow,",
+  (string) (len=59) "\t_ColorWithComment4Name[32:42]: ColorWithComment4BlueGreen,",
+  (string) (len=59) "\t_ColorWithComment4Name[42:52]: ColorWithComment4RedOrange,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=78) "// ParseColorWithComment4 attempts to convert a string to a ColorWithComment4.",
+  (string) (len=69) "func ParseColorWithComment4(name string) (ColorWithComment4, error) {",
+  (string) (len=48) "\tif x, ok := _ColorWithComment4Value[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=87) "\treturn ColorWithComment4(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidColorWithComment4)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=99) "// MustParseColorWithComment4 converts a string to a ColorWithComment4, and panics if is not valid.",
+  (string) (len=64) "func MustParseColorWithComment4(name string) ColorWithComment4 {",
+  (string) (len=41) "\tval, err := ParseColorWithComment4(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=58) "func (x ColorWithComment4) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=62) "func (x *ColorWithComment4) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=41) "\ttmp, err := ParseColorWithComment4(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=103) "var errColorWithComment4NilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=65) "func (x *ColorWithComment4) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=27) "\t\t*x = ColorWithComment4(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=27) "\t\t*x = ColorWithComment4(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=37) "\t\t*x, err = ParseColorWithComment4(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=45) "\t\t*x, err = ParseColorWithComment4(string(v))",
+  (string) (len=24) "\tcase ColorWithComment4:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=27) "\t\t*x = ColorWithComment4(v)",
+  (string) (len=25) "\tcase *ColorWithComment4:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=27) "\t\t*x = ColorWithComment4(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=27) "\t\t*x = ColorWithComment4(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment4(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment4(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=27) "\t\t*x = ColorWithComment4(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment4(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment4(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=28) "\t\t*x = ColorWithComment4(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=36) "\t\t\treturn errColorWithComment4NilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=38) "\t\t*x, err = ParseColorWithComment4(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=58) "func (x ColorWithComment4) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=43) "func ParseColorWithComment4Example() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=49) "func ParseColorWithComment4Description() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=52) "\t// Enum64bitUnknown is a Enum64bit of type Unknown.",
+  (string) (len=34) "\tEnum64bitUnknown Enum64bit = iota",
+  (string) (len=48) "\t// Enum64bitE2P15 is a Enum64bit of type E2P15.",
+  (string) (len=40) "\tEnum64bitE2P15 Enum64bit = iota + 32767",
+  (string) (len=48) "\t// Enum64bitE2P16 is a Enum64bit of type E2P16.",
+  (string) (len=40) "\tEnum64bitE2P16 Enum64bit = iota + 65534",
+  (string) (len=48) "\t// Enum64bitE2P17 is a Enum64bit of type E2P17.",
+  (string) (len=41) "\tEnum64bitE2P17 Enum64bit = iota + 131069",
+  (string) (len=48) "\t// Enum64bitE2P18 is a Enum64bit of type E2P18.",
+  (string) (len=41) "\tEnum64bitE2P18 Enum64bit = iota + 262140",
+  (string) (len=48) "\t// Enum64bitE2P19 is a Enum64bit of type E2P19.",
+  (string) (len=41) "\tEnum64bitE2P19 Enum64bit = iota + 524283",
+  (string) (len=48) "\t// Enum64bitE2P20 is a Enum64bit of type E2P20.",
+  (string) (len=42) "\tEnum64bitE2P20 Enum64bit = iota + 1048570",
+  (string) (len=48) "\t// Enum64bitE2P21 is a Enum64bit of type E2P21.",
+  (string) (len=42) "\tEnum64bitE2P21 Enum64bit = iota + 2097145",
+  (string) (len=48) "\t// Enum64bitE2P22 is a Enum64bit of type E2P22.",
+  (string) (len=43) "\tEnum64bitE2P22 Enum64bit = iota + 33554424",
+  (string) (len=48) "\t// Enum64bitE2P23 is a Enum64bit of type E2P23.",
+  (string) (len=43) "\tEnum64bitE2P23 Enum64bit = iota + 67108855",
+  (string) (len=48) "\t// Enum64bitE2P28 is a Enum64bit of type E2P28.",
+  (string) (len=44) "\tEnum64bitE2P28 Enum64bit = iota + 536870902",
+  (string) (len=48) "\t// Enum64bitE2P30 is a Enum64bit of type E2P30.",
+  (string) (len=45) "\tEnum64bitE2P30 Enum64bit = iota + 1073741813",
+  (string) (len=48) "\t// Enum64bitE2P31 is a Enum64bit of type E2P31.",
+  (string) (len=45) "\tEnum64bitE2P31 Enum64bit = iota + 2147483636",
+  (string) (len=48) "\t// Enum64bitE2P32 is a Enum64bit of type E2P32.",
+  (string) (len=45) "\tEnum64bitE2P32 Enum64bit = iota + 4294967283",
+  (string) (len=48) "\t// Enum64bitE2P33 is a Enum64bit of type E2P33.",
+  (string) (len=45) "\tEnum64bitE2P33 Enum64bit = iota + 8454967282",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=108) "var ErrInvalidEnum64bit = fmt.Errorf(\"not a valid Enum64bit, try [%s]\", strings.Join(_Enum64bitNames, \", \"))",
+  (string) "",
+  (string) (len=102) "const _Enum64bitName = \"UNKNOWNE2P15E2P16E2P17E2P18E2P19E2P20E2P21E2P22E2P23E2P28E2P30E2P31E2P32E2P33\"",
+  (string) "",
+  (string) (len=31) "var _Enum64bitNames = []string{",
+  (string) (len=21) "\t_Enum64bitName[0:7],",
+  (string) (len=22) "\t_Enum64bitName[7:12],",
+  (string) (len=23) "\t_Enum64bitName[12:17],",
+  (string) (len=23) "\t_Enum64bitName[17:22],",
+  (string) (len=23) "\t_Enum64bitName[22:27],",
+  (string) (len=23) "\t_Enum64bitName[27:32],",
+  (string) (len=23) "\t_Enum64bitName[32:37],",
+  (string) (len=23) "\t_Enum64bitName[37:42],",
+  (string) (len=23) "\t_Enum64bitName[42:47],",
+  (string) (len=23) "\t_Enum64bitName[47:52],",
+  (string) (len=23) "\t_Enum64bitName[52:57],",
+  (string) (len=23) "\t_Enum64bitName[57:62],",
+  (string) (len=23) "\t_Enum64bitName[62:67],",
+  (string) (len=23) "\t_Enum64bitName[67:72],",
+  (string) (len=23) "\t_Enum64bitName[72:77],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=72) "// Enum64bitNames returns a list of possible string values of Enum64bit.",
+  (string) (len=32) "func Enum64bitNames() []string {",
+  (string) (len=44) "\ttmp := make([]string, len(_Enum64bitNames))",
+  (string) (len=27) "\tcopy(tmp, _Enum64bitNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=41) "var _Enum64bitMap = map[Enum64bit]string{",
+  (string) (len=39) "\tEnum64bitUnknown: _Enum64bitName[0:7],",
+  (string) (len=40) "\tEnum64bitE2P15:   _Enum64bitName[7:12],",
+  (string) (len=41) "\tEnum64bitE2P16:   _Enum64bitName[12:17],",
+  (string) (len=41) "\tEnum64bitE2P17:   _Enum64bitName[17:22],",
+  (string) (len=41) "\tEnum64bitE2P18:   _Enum64bitName[22:27],",
+  (string) (len=41) "\tEnum64bitE2P19:   _Enum64bitName[27:32],",
+  (string) (len=41) "\tEnum64bitE2P20:   _Enum64bitName[32:37],",
+  (string) (len=41) "\tEnum64bitE2P21:   _Enum64bitName[37:42],",
+  (string) (len=41) "\tEnum64bitE2P22:   _Enum64bitName[42:47],",
+  (string) (len=41) "\tEnum64bitE2P23:   _Enum64bitName[47:52],",
+  (string) (len=41) "\tEnum64bitE2P28:   _Enum64bitName[52:57],",
+  (string) (len=41) "\tEnum64bitE2P30:   _Enum64bitName[57:62],",
+  (string) (len=41) "\tEnum64bitE2P31:   _Enum64bitName[62:67],",
+  (string) (len=41) "\tEnum64bitE2P32:   _Enum64bitName[67:72],",
+  (string) (len=41) "\tEnum64bitE2P33:   _Enum64bitName[72:77],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=36) "func (x Enum64bit) String() string {",
+  (string) (len=37) "\tif str, ok := _Enum64bitMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=39) "\treturn fmt.Sprintf(\"Enum64bit(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=35) "func (x Enum64bit) IsValid() bool {",
+  (string) (len=26) "\t_, ok := _Enum64bitMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=43) "var _Enum64bitValue = map[string]Enum64bit{",
+  (string) (len=41) "\t_Enum64bitName[0:7]:   Enum64bitUnknown,",
+  (string) (len=39) "\t_Enum64bitName[7:12]:  Enum64bitE2P15,",
+  (string) (len=39) "\t_Enum64bitName[12:17]: Enum64bitE2P16,",
+  (string) (len=39) "\t_Enum64bitName[17:22]: Enum64bitE2P17,",
+  (string) (len=39) "\t_Enum64bitName[22:27]: Enum64bitE2P18,",
+  (string) (len=39) "\t_Enum64bitName[27:32]: Enum64bitE2P19,",
+  (string) (len=39) "\t_Enum64bitName[32:37]: Enum64bitE2P20,",
+  (string) (len=39) "\t_Enum64bitName[37:42]: Enum64bitE2P21,",
+  (string) (len=39) "\t_Enum64bitName[42:47]: Enum64bitE2P22,",
+  (string) (len=39) "\t_Enum64bitName[47:52]: Enum64bitE2P23,",
+  (string) (len=39) "\t_Enum64bitName[52:57]: Enum64bitE2P28,",
+  (string) (len=39) "\t_Enum64bitName[57:62]: Enum64bitE2P30,",
+  (string) (len=39) "\t_Enum64bitName[62:67]: Enum64bitE2P31,",
+  (string) (len=39) "\t_Enum64bitName[67:72]: Enum64bitE2P32,",
+  (string) (len=39) "\t_Enum64bitName[72:77]: Enum64bitE2P33,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=62) "// ParseEnum64bit attempts to convert a string to a Enum64bit.",
+  (string) (len=53) "func ParseEnum64bit(name string) (Enum64bit, error) {",
+  (string) (len=40) "\tif x, ok := _Enum64bitValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=71) "\treturn Enum64bit(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidEnum64bit)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=83) "// MustParseEnum64bit converts a string to a Enum64bit, and panics if is not valid.",
+  (string) (len=48) "func MustParseEnum64bit(name string) Enum64bit {",
+  (string) (len=33) "\tval, err := ParseEnum64bit(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=50) "func (x Enum64bit) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=54) "func (x *Enum64bit) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=33) "\ttmp, err := ParseEnum64bit(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=95) "var errEnum64bitNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=57) "func (x *Enum64bit) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=19) "\t\t*x = Enum64bit(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=19) "\t\t*x = Enum64bit(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=29) "\t\t*x, err = ParseEnum64bit(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=37) "\t\t*x, err = ParseEnum64bit(string(v))",
+  (string) (len=16) "\tcase Enum64bit:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=19) "\t\t*x = Enum64bit(v)",
+  (string) (len=17) "\tcase *Enum64bit:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=19) "\t\t*x = Enum64bit(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=19) "\t\t*x = Enum64bit(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=20) "\t\t*x = Enum64bit(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=20) "\t\t*x = Enum64bit(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=19) "\t\t*x = Enum64bit(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=20) "\t\t*x = Enum64bit(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=20) "\t\t*x = Enum64bit(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=20) "\t\t*x = Enum64bit(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=28) "\t\t\treturn errEnum64bitNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=30) "\t\t*x, err = ParseEnum64bit(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=50) "func (x Enum64bit) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=35) "func ParseEnum64bitExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=41) "func ParseEnum64bitDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=42) "\t// ModelToyota is a Model of type Toyota.",
+  (string) (len=25) "\tModelToyota Model = iota",
+  (string) (len=18) "\t// Skipped value.",
+  (string) (len=2) "\t_",
+  (string) (len=40) "\t// ModelChevy is a Model of type Chevy.",
+  (string) (len=11) "\tModelChevy",
+  (string) (len=18) "\t// Skipped value.",
+  (string) (len=2) "\t_",
+  (string) (len=38) "\t// ModelFord is a Model of type Ford.",
+  (string) (len=10) "\tModelFord",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=96) "var ErrInvalidModel = fmt.Errorf(\"not a valid Model, try [%s]\", strings.Join(_ModelNames, \", \"))",
+  (string) "",
+  (string) (len=36) "const _ModelName = \"TOYOTACHEVYFORD\"",
+  (string) "",
+  (string) (len=27) "var _ModelNames = []string{",
+  (string) (len=17) "\t_ModelName[0:6],",
+  (string) (len=18) "\t_ModelName[6:11],",
+  (string) (len=19) "\t_ModelName[11:15],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// ModelNames returns a list of possible string values of Model.",
+  (string) (len=28) "func ModelNames() []string {",
+  (string) (len=40) "\ttmp := make([]string, len(_ModelNames))",
+  (string) (len=23) "\tcopy(tmp, _ModelNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=33) "var _ModelMap = map[Model]string{",
+  (string) (len=30) "\tModelToyota: _ModelName[0:6],",
+  (string) (len=31) "\tModelChevy:  _ModelName[6:11],",
+  (string) (len=32) "\tModelFord:   _ModelName[11:15],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=32) "func (x Model) String() string {",
+  (string) (len=33) "\tif str, ok := _ModelMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=35) "\treturn fmt.Sprintf(\"Model(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=31) "func (x Model) IsValid() bool {",
+  (string) (len=22) "\t_, ok := _ModelMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=35) "var _ModelValue = map[string]Model{",
+  (string) (len=32) "\t_ModelName[0:6]:   ModelToyota,",
+  (string) (len=31) "\t_ModelName[6:11]:  ModelChevy,",
+  (string) (len=30) "\t_ModelName[11:15]: ModelFord,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=54) "// ParseModel attempts to convert a string to a Model.",
+  (string) (len=45) "func ParseModel(name string) (Model, error) {",
+  (string) (len=36) "\tif x, ok := _ModelValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=63) "\treturn Model(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidModel)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=75) "// MustParseModel converts a string to a Model, and panics if is not valid.",
+  (string) (len=40) "func MustParseModel(name string) Model {",
+  (string) (len=29) "\tval, err := ParseModel(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=46) "func (x Model) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=50) "func (x *Model) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=29) "\ttmp, err := ParseModel(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=91) "var errModelNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=53) "func (x *Model) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=15) "\t\t*x = Model(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=15) "\t\t*x = Model(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=25) "\t\t*x, err = ParseModel(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=33) "\t\t*x, err = ParseModel(string(v))",
+  (string) (len=12) "\tcase Model:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=15) "\t\t*x = Model(v)",
+  (string) (len=13) "\tcase *Model:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=15) "\t\t*x = Model(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=15) "\t\t*x = Model(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Model(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Model(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\t*x = Model(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Model(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Model(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=16) "\t\t*x = Model(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=24) "\t\t\treturn errModelNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=26) "\t\t*x, err = ParseModel(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=46) "func (x Model) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=31) "func ParseModelExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=37) "func ParseModelDescription() string {",
+  (string) (len=17) "\treturn `Model x`",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=60) "\t// NonASCIIПродам is a NonASCII of type Продам.",
+  (string) (len=44) "\tNonASCIIПродам NonASCII = iota + 1114",
+  (string) (len=48) "\t// NonASCII車庫 is a NonASCII of type 車庫.",
+  (string) (len=37) "\tNonASCII車庫 NonASCII = iota + 299",
+  (string) (len=52) "\t// NonASCIIԷժան is a NonASCII of type Էժան.",
+  (string) (len=38) "\tNonASCIIԷժան NonASCII = iota + -1",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=105) "var ErrInvalidNonASCII = fmt.Errorf(\"not a valid NonASCII, try [%s]\", strings.Join(_NonASCIINames, \", \"))",
+  (string) "",
+  (string) (len=50) "const _NonASCIIName = \"ПРОДАМ車庫ԷԺԱՆ\"",
+  (string) "",
+  (string) (len=30) "var _NonASCIINames = []string{",
+  (string) (len=21) "\t_NonASCIIName[0:12],",
+  (string) (len=22) "\t_NonASCIIName[12:18],",
+  (string) (len=22) "\t_NonASCIIName[18:26],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=70) "// NonASCIINames returns a list of possible string values of NonASCII.",
+  (string) (len=31) "func NonASCIINames() []string {",
+  (string) (len=43) "\ttmp := make([]string, len(_NonASCIINames))",
+  (string) (len=26) "\tcopy(tmp, _NonASCIINames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=39) "var _NonASCIIMap = map[NonASCII]string{",
+  (string) (len=43) "\tNonASCIIПродам: _NonASCIIName[0:12],",
+  (string) (len=42) "\tNonASCII車庫:     _NonASCIIName[12:18],",
+  (string) (len=42) "\tNonASCIIԷժան:   _NonASCIIName[18:26],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=35) "func (x NonASCII) String() string {",
+  (string) (len=36) "\tif str, ok := _NonASCIIMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=38) "\treturn fmt.Sprintf(\"NonASCII(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=34) "func (x NonASCII) IsValid() bool {",
+  (string) (len=25) "\t_, ok := _NonASCIIMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=41) "var _NonASCIIValue = map[string]NonASCII{",
+  (string) (len=44) "\t_NonASCIIName[0:12]:  NonASCIIПродам,",
+  (string) (len=38) "\t_NonASCIIName[12:18]: NonASCII車庫,",
+  (string) (len=40) "\t_NonASCIIName[18:26]: NonASCIIԷժան,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=60) "// ParseNonASCII attempts to convert a string to a NonASCII.",
+  (string) (len=51) "func ParseNonASCII(name string) (NonASCII, error) {",
+  (string) (len=39) "\tif x, ok := _NonASCIIValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=69) "\treturn NonASCII(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidNonASCII)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=81) "// MustParseNonASCII converts a string to a NonASCII, and panics if is not valid.",
+  (string) (len=46) "func MustParseNonASCII(name string) NonASCII {",
+  (string) (len=32) "\tval, err := ParseNonASCII(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=49) "func (x NonASCII) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=53) "func (x *NonASCII) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=32) "\ttmp, err := ParseNonASCII(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=94) "var errNonASCIINilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=56) "func (x *NonASCII) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=18) "\t\t*x = NonASCII(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=18) "\t\t*x = NonASCII(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=28) "\t\t*x, err = ParseNonASCII(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=36) "\t\t*x, err = ParseNonASCII(string(v))",
+  (string) (len=15) "\tcase NonASCII:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=18) "\t\t*x = NonASCII(v)",
+  (string) (len=16) "\tcase *NonASCII:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=18) "\t\t*x = NonASCII(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=18) "\t\t*x = NonASCII(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=19) "\t\t*x = NonASCII(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=19) "\t\t*x = NonASCII(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=18) "\t\t*x = NonASCII(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=19) "\t\t*x = NonASCII(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=19) "\t\t*x = NonASCII(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=19) "\t\t*x = NonASCII(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=27) "\t\t\treturn errNonASCIINilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=29) "\t\t*x, err = ParseNonASCII(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=49) "func (x NonASCII) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=34) "func ParseNonASCIIExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=40) "func ParseNonASCIIDescription() string {",
+  (string) (len=18) "\treturn `NonASCII`",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=61) "\t// SanitizingTestHyphen is a Sanitizing of type Test-Hyphen.",
+  (string) (len=39) "\tSanitizingTestHyphen Sanitizing = iota",
+  (string) (len=63) "\t// SanitizingHyphenStart is a Sanitizing of type -HyphenStart.",
+  (string) (len=22) "\tSanitizingHyphenStart",
+  (string) (len=72) "\t// Sanitizing_UnderscoreFirst is a Sanitizing of type _UnderscoreFirst.",
+  (string) (len=27) "\tSanitizing_UnderscoreFirst",
+  (string) (len=64) "\t// Sanitizing0NumberFirst is a Sanitizing of type 0NumberFirst.",
+  (string) (len=23) "\tSanitizing0NumberFirst",
+  (string) (len=60) "\t// Sanitizing123456789A is a Sanitizing of type 123456789A.",
+  (string) (len=21) "\tSanitizing123456789A",
+  (string) (len=61) "\t// Sanitizing123123Asdf is a Sanitizing of type 123123-Asdf.",
+  (string) (len=21) "\tSanitizing123123Asdf",
+  (string) (len=66) "\t// SanitizingEndingHyphen is a Sanitizing of type Ending-Hyphen-.",
+  (string) (len=23) "\tSanitizingEndingHyphen",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=111) "var ErrInvalidSanitizing = fmt.Errorf(\"not a valid Sanitizing, try [%s]\", strings.Join(_SanitizingNames, \", \"))",
+  (string) "",
+  (string) (len=112) "const _SanitizingName = \"TEST-HYPHEN-HYPHENSTART_UNDERSCOREFIRST0NUMBERFIRST123456789A123123-ASDFENDING-HYPHEN-\"",
+  (string) "",
+  (string) (len=32) "var _SanitizingNames = []string{",
+  (string) (len=23) "\t_SanitizingName[0:11],",
+  (string) (len=24) "\t_SanitizingName[11:23],",
+  (string) (len=24) "\t_SanitizingName[23:39],",
+  (string) (len=24) "\t_SanitizingName[39:51],",
+  (string) (len=24) "\t_SanitizingName[51:61],",
+  (string) (len=24) "\t_SanitizingName[61:72],",
+  (string) (len=24) "\t_SanitizingName[72:86],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=74) "// SanitizingNames returns a list of possible string values of Sanitizing.",
+  (string) (len=33) "func SanitizingNames() []string {",
+  (string) (len=45) "\ttmp := make([]string, len(_SanitizingNames))",
+  (string) (len=28) "\tcopy(tmp, _SanitizingNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=43) "var _SanitizingMap = map[Sanitizing]string{",
+  (string) (len=51) "\tSanitizingTestHyphen:       _SanitizingName[0:11],",
+  (string) (len=52) "\tSanitizingHyphenStart:      _SanitizingName[11:23],",
+  (string) (len=52) "\tSanitizing_UnderscoreFirst: _SanitizingName[23:39],",
+  (string) (len=52) "\tSanitizing0NumberFirst:     _SanitizingName[39:51],",
+  (string) (len=52) "\tSanitizing123456789A:       _SanitizingName[51:61],",
+  (string) (len=52) "\tSanitizing123123Asdf:       _SanitizingName[61:72],",
+  (string) (len=52) "\tSanitizingEndingHyphen:     _SanitizingName[72:86],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=37) "func (x Sanitizing) String() string {",
+  (string) (len=38) "\tif str, ok := _SanitizingMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=40) "\treturn fmt.Sprintf(\"Sanitizing(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=36) "func (x Sanitizing) IsValid() bool {",
+  (string) (len=27) "\t_, ok := _SanitizingMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=45) "var _SanitizingValue = map[string]Sanitizing{",
+  (string) (len=46) "\t_SanitizingName[0:11]:  SanitizingTestHyphen,",
+  (string) (len=47) "\t_SanitizingName[11:23]: SanitizingHyphenStart,",
+  (string) (len=52) "\t_SanitizingName[23:39]: Sanitizing_UnderscoreFirst,",
+  (string) (len=48) "\t_SanitizingName[39:51]: Sanitizing0NumberFirst,",
+  (string) (len=46) "\t_SanitizingName[51:61]: Sanitizing123456789A,",
+  (string) (len=46) "\t_SanitizingName[61:72]: Sanitizing123123Asdf,",
+  (string) (len=48) "\t_SanitizingName[72:86]: SanitizingEndingHyphen,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// ParseSanitizing attempts to convert a string to a Sanitizing.",
+  (string) (len=55) "func ParseSanitizing(name string) (Sanitizing, error) {",
+  (string) (len=41) "\tif x, ok := _SanitizingValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=73) "\treturn Sanitizing(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidSanitizing)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=85) "// MustParseSanitizing converts a string to a Sanitizing, and panics if is not valid.",
+  (string) (len=50) "func MustParseSanitizing(name string) Sanitizing {",
+  (string) (len=34) "\tval, err := ParseSanitizing(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=51) "func (x Sanitizing) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=55) "func (x *Sanitizing) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=34) "\ttmp, err := ParseSanitizing(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=96) "var errSanitizingNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=58) "func (x *Sanitizing) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=20) "\t\t*x = Sanitizing(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=20) "\t\t*x = Sanitizing(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=30) "\t\t*x, err = ParseSanitizing(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=38) "\t\t*x, err = ParseSanitizing(string(v))",
+  (string) (len=17) "\tcase Sanitizing:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=20) "\t\t*x = Sanitizing(v)",
+  (string) (len=18) "\tcase *Sanitizing:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=20) "\t\t*x = Sanitizing(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=20) "\t\t*x = Sanitizing(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = Sanitizing(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = Sanitizing(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=20) "\t\t*x = Sanitizing(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = Sanitizing(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = Sanitizing(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = Sanitizing(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errSanitizingNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=31) "\t\t*x, err = ParseSanitizing(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=51) "func (x Sanitizing) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=36) "func ParseSanitizingExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=42) "func ParseSanitizingDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=36) "\t// SodaCoke is a Soda of type Coke.",
+  (string) (len=21) "\tSodaCoke Soda = iota",
+  (string) (len=38) "\t// SodaPepsi is a Soda of type Pepsi.",
+  (string) (len=10) "\tSodaPepsi",
+  (string) (len=40) "\t// SodaMtnDew is a Soda of type MtnDew.",
+  (string) (len=11) "\tSodaMtnDew",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=93) "var ErrInvalidSoda = fmt.Errorf(\"not a valid Soda, try [%s]\", strings.Join(_SodaNames, \", \"))",
+  (string) "",
+  (string) (len=35) "const _SodaName = \"COKEPEPSIMTNDEW\"",
+  (string) "",
+  (string) (len=26) "var _SodaNames = []string{",
+  (string) (len=16) "\t_SodaName[0:4],",
+  (string) (len=16) "\t_SodaName[4:9],",
+  (string) (len=17) "\t_SodaName[9:15],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=62) "// SodaNames returns a list of possible string values of Soda.",
+  (string) (len=27) "func SodaNames() []string {",
+  (string) (len=39) "\ttmp := make([]string, len(_SodaNames))",
+  (string) (len=22) "\tcopy(tmp, _SodaNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=31) "var _SodaMap = map[Soda]string{",
+  (string) (len=28) "\tSodaCoke:   _SodaName[0:4],",
+  (string) (len=28) "\tSodaPepsi:  _SodaName[4:9],",
+  (string) (len=29) "\tSodaMtnDew: _SodaName[9:15],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=31) "func (x Soda) String() string {",
+  (string) (len=32) "\tif str, ok := _SodaMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=34) "\treturn fmt.Sprintf(\"Soda(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=30) "func (x Soda) IsValid() bool {",
+  (string) (len=21) "\t_, ok := _SodaMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=33) "var _SodaValue = map[string]Soda{",
+  (string) (len=27) "\t_SodaName[0:4]:  SodaCoke,",
+  (string) (len=28) "\t_SodaName[4:9]:  SodaPepsi,",
+  (string) (len=29) "\t_SodaName[9:15]: SodaMtnDew,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=52) "// ParseSoda attempts to convert a string to a Soda.",
+  (string) (len=43) "func ParseSoda(name string) (Soda, error) {",
+  (string) (len=35) "\tif x, ok := _SodaValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=61) "\treturn Soda(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidSoda)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=73) "// MustParseSoda converts a string to a Soda, and panics if is not valid.",
+  (string) (len=38) "func MustParseSoda(name string) Soda {",
+  (string) (len=28) "\tval, err := ParseSoda(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=45) "func (x Soda) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=49) "func (x *Soda) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=28) "\ttmp, err := ParseSoda(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=90) "var errSodaNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=52) "func (x *Soda) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=14) "\t\t*x = Soda(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=14) "\t\t*x = Soda(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=24) "\t\t*x, err = ParseSoda(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=32) "\t\t*x, err = ParseSoda(string(v))",
+  (string) (len=11) "\tcase Soda:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=14) "\t\t*x = Soda(v)",
+  (string) (len=12) "\tcase *Soda:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=14) "\t\t*x = Soda(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=14) "\t\t*x = Soda(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=15) "\t\t*x = Soda(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=15) "\t\t*x = Soda(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=14) "\t\t*x = Soda(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=15) "\t\t*x = Soda(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=15) "\t\t*x = Soda(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=15) "\t\t*x = Soda(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=23) "\t\t\treturn errSodaNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=25) "\t\t*x, err = ParseSoda(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=45) "func (x Soda) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=30) "func ParseSodaExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=36) "func ParseSodaDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=68) "\t// StartNotZeroStartWithNum is a StartNotZero of type StartWithNum.",
+  (string) (len=50) "\tStartNotZeroStartWithNum StartNotZero = iota + 23",
+  (string) (len=58) "\t// StartNotZeroNextNum is a StartNotZero of type NextNum.",
+  (string) (len=20) "\tStartNotZeroNextNum",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=117) "var ErrInvalidStartNotZero = fmt.Errorf(\"not a valid StartNotZero, try [%s]\", strings.Join(_StartNotZeroNames, \", \"))",
+  (string) "",
+  (string) (len=47) "const _StartNotZeroName = \"STARTWITHNUMNEXTNUM\"",
+  (string) "",
+  (string) (len=34) "var _StartNotZeroNames = []string{",
+  (string) (len=25) "\t_StartNotZeroName[0:12],",
+  (string) (len=26) "\t_StartNotZeroName[12:19],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=78) "// StartNotZeroNames returns a list of possible string values of StartNotZero.",
+  (string) (len=35) "func StartNotZeroNames() []string {",
+  (string) (len=47) "\ttmp := make([]string, len(_StartNotZeroNames))",
+  (string) (len=30) "\tcopy(tmp, _StartNotZeroNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=47) "var _StartNotZeroMap = map[StartNotZero]string{",
+  (string) (len=51) "\tStartNotZeroStartWithNum: _StartNotZeroName[0:12],",
+  (string) (len=52) "\tStartNotZeroNextNum:      _StartNotZeroName[12:19],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=39) "func (x StartNotZero) String() string {",
+  (string) (len=40) "\tif str, ok := _StartNotZeroMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=42) "\treturn fmt.Sprintf(\"StartNotZero(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=38) "func (x StartNotZero) IsValid() bool {",
+  (string) (len=29) "\t_, ok := _StartNotZeroMap[x]",
+  (string) (len=10) "\treturn ok",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=49) "var _StartNotZeroValue = map[string]StartNotZero{",
+  (string) (len=52) "\t_StartNotZeroName[0:12]:  StartNotZeroStartWithNum,",
+  (string) (len=47) "\t_StartNotZeroName[12:19]: StartNotZeroNextNum,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=68) "// ParseStartNotZero attempts to convert a string to a StartNotZero.",
+  (string) (len=59) "func ParseStartNotZero(name string) (StartNotZero, error) {",
+  (string) (len=43) "\tif x, ok := _StartNotZeroValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=77) "\treturn StartNotZero(0), fmt.Errorf(\"%s is %w\", name, ErrInvalidStartNotZero)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=89) "// MustParseStartNotZero converts a string to a StartNotZero, and panics if is not valid.",
+  (string) (len=54) "func MustParseStartNotZero(name string) StartNotZero {",
+  (string) (len=36) "\tval, err := ParseStartNotZero(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=53) "func (x StartNotZero) MarshalText() ([]byte, error) {",
+  (string) (len=31) "\treturn []byte(x.String()), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=57) "func (x *StartNotZero) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=36) "\ttmp, err := ParseStartNotZero(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=98) "var errStartNotZeroNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=60) "func (x *StartNotZero) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=22) "\t\t*x = StartNotZero(0)",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=12) "\tcase int64:",
+  (string) (len=22) "\t\t*x = StartNotZero(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=32) "\t\t*x, err = ParseStartNotZero(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=40) "\t\t*x, err = ParseStartNotZero(string(v))",
+  (string) (len=19) "\tcase StartNotZero:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=22) "\t\t*x = StartNotZero(v)",
+  (string) (len=20) "\tcase *StartNotZero:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=22) "\t\t*x = StartNotZero(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=22) "\t\t*x = StartNotZero(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=23) "\t\t*x = StartNotZero(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=23) "\t\t*x = StartNotZero(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=22) "\t\t*x = StartNotZero(v)",
+  (string) (len=73) "\tcase *float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=23) "\t\t*x = StartNotZero(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=23) "\t\t*x = StartNotZero(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=23) "\t\t*x = StartNotZero(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=31) "\t\t\treturn errStartNotZeroNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=33) "\t\t*x, err = ParseStartNotZero(*v)",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=53) "func (x StartNotZero) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=38) "func ParseStartNotZeroExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=44) "func ParseStartNotZeroDescription() string {",
+  (string) (len=10) "\treturn ``",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=52) "\t// StringEnumRandom is a StringEnum of type random.",
+  (string) (len=39) "\tStringEnumRandom StringEnum = \"random\"",
+  (string) (len=52) "\t// StringEnumValues is a StringEnum of type values.",
+  (string) (len=39) "\tStringEnumValues StringEnum = \"values\"",
+  (string) (len=48) "\t// StringEnumHere is a StringEnum of type here.",
+  (string) (len=35) "\tStringEnumHere StringEnum = \"here\"",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=111) "var ErrInvalidStringEnum = fmt.Errorf(\"not a valid StringEnum, try [%s]\", strings.Join(_StringEnumNames, \", \"))",
+  (string) "",
+  (string) (len=32) "var _StringEnumNames = []string{",
+  (string) (len=26) "\tstring(StringEnumRandom),",
+  (string) (len=26) "\tstring(StringEnumValues),",
+  (string) (len=24) "\tstring(StringEnumHere),",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=74) "// StringEnumNames returns a list of possible string values of StringEnum.",
+  (string) (len=33) "func StringEnumNames() []string {",
+  (string) (len=45) "\ttmp := make([]string, len(_StringEnumNames))",
+  (string) (len=28) "\tcopy(tmp, _StringEnumNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=37) "func (x StringEnum) String() string {",
+  (string) (len=17) "\treturn string(x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=66) "// IsValid provides a quick way to determine if the typed value is",
+  (string) (len=40) "// part of the allowed enumerated values",
+  (string) (len=36) "func (x StringEnum) IsValid() bool {",
+  (string) (len=37) "\t_, err := ParseStringEnum(string(x))",
+  (string) (len=18) "\treturn err == nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=45) "var _StringEnumValue = map[string]StringEnum{",
+  (string) (len=28) "\t\"random\": StringEnumRandom,",
+  (string) (len=28) "\t\"values\": StringEnumValues,",
+  (string) (len=26) "\t\"here\":   StringEnumHere,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// ParseStringEnum attempts to convert a string to a StringEnum.",
+  (string) (len=55) "func ParseStringEnum(name string) (StringEnum, error) {",
+  (string) (len=41) "\tif x, ok := _StringEnumValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=74) "\treturn StringEnum(\"\"), fmt.Errorf(\"%s is %w\", name, ErrInvalidStringEnum)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=85) "// MustParseStringEnum converts a string to a StringEnum, and panics if is not valid.",
+  (string) (len=50) "func MustParseStringEnum(name string) StringEnum {",
+  (string) (len=34) "\tval, err := ParseStringEnum(name)",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\tpanic(err)",
+  (string) (len=2) "\t}",
+  (string) (len=11) "\treturn val",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=53) "// MarshalText implements the text marshaller method.",
+  (string) (len=51) "func (x StringEnum) MarshalText() ([]byte, error) {",
+  (string) (len=30) "\treturn []byte(string(x)), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=57) "// UnmarshalText implements the text unmarshaller method.",
+  (string) (len=55) "func (x *StringEnum) UnmarshalText(text []byte) error {",
+  (string) (len=42) "\ttmp, err := ParseStringEnum(string(text))",
+  (string) (len=16) "\tif err != nil {",
+  (string) (len=12) "\t\treturn err",
+  (string) (len=2) "\t}",
+  (string) (len=9) "\t*x = tmp",
+  (string) (len=11) "\treturn nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=96) "var errStringEnumNilPtr = errors.New(\"value pointer is nil\") // one per type for package clashes",
+  (string) "",
+  (string) (len=41) "// Scan implements the Scanner interface.",
+  (string) (len=58) "func (x *StringEnum) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=21) "\t\t*x = StringEnum(\"\")",
+  (string) (len=8) "\t\treturn",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=37) "\t// A wider range of scannable types.",
+  (string) (len=61) "\t// driver.Value values at the top of the list for expediency",
+  (string) (len=27) "\tswitch v := value.(type) {",
+  (string) (len=13) "\tcase string:",
+  (string) (len=30) "\t\t*x, err = ParseStringEnum(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=38) "\t\t*x, err = ParseStringEnum(string(v))",
+  (string) (len=17) "\tcase StringEnum:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=18) "\tcase *StringEnum:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errStringEnumNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=29) "\t\t\treturn errStringEnumNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=31) "\t\t*x, err = ParseStringEnum(*v)",
+  (string) (len=9) "\tdefault:",
+  (string) (len=50) "\t\treturn errors.New(\"invalid type for StringEnum\")",
+  (string) (len=2) "\t}",
+  (string) "",
+  (string) (len=7) "\treturn",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=48) "// Value implements the driver Valuer interface.",
+  (string) (len=51) "func (x StringEnum) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=36) "func ParseStringEnumExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) (len=42) "func ParseStringEnumDescription() string {",
+  (string) (len=21) "\treturn `StringEnum.`",
+  (string) (len=1) "}",
+  (string) ""
+}
diff --git a/generator/generator_test.go b/generator/generator_test.go
index 5255559..3732a0b 100644
--- a/generator/generator_test.go
+++ b/generator/generator_test.go
@@ -88,6 +88,28 @@ func TestExampleFileMoreOptions(t *testing.T) {
 	}
 }
 
+// TestExampleFileMoreOptionsWithForceUpper — test with force upper option
+func TestExampleFileMoreOptionsWithForceUpper(t *testing.T) {
+	g := NewGenerator().
+		WithMarshal().
+		WithSQLDriver().
+		WithNames().
+		WithoutSnakeToCamel().
+		WithMustParse().
+		WithForceUpper().
+		WithTemplates(`../example/user_template.tmpl`)
+	// Parse the file given in arguments
+	imported, err := g.GenerateFromFile(testExample)
+	require.Nil(t, err, "Error generating formatted code")
+
+	outputLines := strings.Split(string(imported), "\n")
+	cupaloy.SnapshotT(t, outputLines)
+
+	if false {
+		fmt.Println(string(imported))
+	}
+}
+
 // TestExampleFile
 func TestNoPrefixExampleFile(t *testing.T) {
 	g := NewGenerator().