Repository: abice/go-enum
Pull request #112 (2022-06-17 19:03:59)

move examples folder


Patch:
diff --git a/Makefile b/Makefile
index 9a17b87..30fdc95 100644
--- a/Makefile
+++ b/Makefile
@@ -37,7 +37,7 @@ deps: $(MOCKGEN)
 deps: $(GOBINDATA)
 deps: $(GOIMPORTS)
 
-PACKAGES='./generator' './example'
+PACKAGES='./generator' './_example'
 
 .PHONY: all
 all: build fmt test example cover install
@@ -88,7 +88,7 @@ phony: clean tc build
 
 .PHONY: example
 example:
-	$(GO) generate ./example/...
+	$(GO) generate ./_example/...
 
 bin/goimports: go.sum
 	$(call goinstall,golang.org/x/tools/cmd/goimports)
diff --git a/README.md b/README.md
index d5a15bf..85ae0ac 100644
--- a/README.md
+++ b/README.md
@@ -21,16 +21,16 @@ and generate a file with the iota definition along various optional niceties tha
 
 ```go
 const (
-	// ImageTypeJpeg is a ImageType of type Jpeg.
-	ImageTypeJpeg ImageType = iota
-	// ImageTypeJpg is a ImageType of type Jpg.
-	ImageTypeJpg
-	// ImageTypePng is a ImageType of type Png.
-	ImageTypePng
-	// ImageTypeTiff is a ImageType of type Tiff.
-	ImageTypeTiff
-	// ImageTypeGif is a ImageType of type Gif.
-	ImageTypeGif
+ // ImageTypeJpeg is a ImageType of type Jpeg.
+ ImageTypeJpeg ImageType = iota
+ // ImageTypeJpg is a ImageType of type Jpg.
+ ImageTypeJpg
+ // ImageTypePng is a ImageType of type Png.
+ ImageTypePng
+ // ImageTypeTiff is a ImageType of type Tiff.
+ ImageTypeTiff
+ // ImageTypeGif is a ImageType of type Gif.
+ ImageTypeGif
 )
 
 // String implements the Stringer interface.
@@ -80,10 +80,10 @@ I did not specify any overrides on the release binary names, so `uname -s` and `
 If you prefer makefile stuff, you can always do something like this:
 
 ```Makefile
-STANDARD_ENUMS = example/animal_enum.go \
-	example/color_enum.go
+STANDARD_ENUMS = ./_example/animal_enum.go \
+ ./_example/color_enum.go
 
-NULLABLE_ENUMS = example/sql_enum.go
+NULLABLE_ENUMS = ./_example/sql_enum.go
 
 $(STANDARD_ENUMS): GO_ENUM_FLAGS=--nocase --marshal --names --ptr
 $(NULLABLE_ENUMS): GO_ENUM_FLAGS=--nocase --marshal --names --sqlnullint --ptr
@@ -93,7 +93,7 @@ enums: $(STANDARD_ENUMS) $(NULLABLE_ENUMS)
 # The generator statement for go enum files.  Files that invalidate the
 # enum file: source file, the binary itself, and this file (in case you want to generate with different flags)
 %_enum.go: %.go $(GOENUM) Makefile
-	$(GOENUM) -f $*.go $(GO_ENUM_FLAGS)
+ $(GOENUM) -f $*.go $(GO_ENUM_FLAGS)
 ```
 
 ## Command options
@@ -172,7 +172,7 @@ const (
 
 #### Example
 
-There are a few examples in the `example` [directory](example).
+There are a few examples in the `_example` [directory](_example).
 I've included one here for easy access, but can't guarantee it's up to date.
 
 ``` go
@@ -204,110 +204,110 @@ The generated code will look something like:
 package example
 
 import (
-	"fmt"
-	"strings"
+ "fmt"
+ "strings"
 )
 
 const (
-	// ColorBlack is a Color of type Black.
-	ColorBlack Color = iota
-	// ColorWhite is a Color of type White.
-	ColorWhite
-	// ColorRed is a Color of type Red.
-	ColorRed
-	// ColorGreen is a Color of type Green.
-	// Green starts with 33
-	ColorGreen Color = iota + 30
-	// ColorBlue is a Color of type Blue.
-	ColorBlue
-	// ColorGrey is a Color of type Grey.
-	ColorGrey
-	// ColorYellow is a Color of type Yellow.
-	ColorYellow
-	// ColorBlueGreen is a Color of type Blue-Green.
-	ColorBlueGreen
-	// ColorRedOrange is a Color of type Red-Orange.
-	ColorRedOrange
-	// ColorYellowGreen is a Color of type Yellow_green.
-	ColorYellowGreen
-	// ColorRedOrangeBlue is a Color of type Red-Orange-Blue.
-	ColorRedOrangeBlue
+ // ColorBlack is a Color of type Black.
+ ColorBlack Color = iota
+ // ColorWhite is a Color of type White.
+ ColorWhite
+ // ColorRed is a Color of type Red.
+ ColorRed
+ // ColorGreen is a Color of type Green.
+ // Green starts with 33
+ ColorGreen Color = iota + 30
+ // ColorBlue is a Color of type Blue.
+ ColorBlue
+ // ColorGrey is a Color of type Grey.
+ ColorGrey
+ // ColorYellow is a Color of type Yellow.
+ ColorYellow
+ // ColorBlueGreen is a Color of type Blue-Green.
+ ColorBlueGreen
+ // ColorRedOrange is a Color of type Red-Orange.
+ ColorRedOrange
+ // ColorYellowGreen is a Color of type Yellow_green.
+ ColorYellowGreen
+ // ColorRedOrangeBlue is a Color of type Red-Orange-Blue.
+ ColorRedOrangeBlue
 )
 
 const _ColorName = "BlackWhiteRedGreenBluegreyyellowblue-greenred-orangeyellow_greenred-orange-blue"
 
 var _ColorMap = map[Color]string{
-	ColorBlack:         _ColorName[0:5],
-	ColorWhite:         _ColorName[5:10],
-	ColorRed:           _ColorName[10:13],
-	ColorGreen:         _ColorName[13:18],
-	ColorBlue:          _ColorName[18:22],
-	ColorGrey:          _ColorName[22:26],
-	ColorYellow:        _ColorName[26:32],
-	ColorBlueGreen:     _ColorName[32:42],
-	ColorRedOrange:     _ColorName[42:52],
-	ColorYellowGreen:   _ColorName[52:64],
-	ColorRedOrangeBlue: _ColorName[64:79],
+ ColorBlack:         _ColorName[0:5],
+ ColorWhite:         _ColorName[5:10],
+ ColorRed:           _ColorName[10:13],
+ ColorGreen:         _ColorName[13:18],
+ ColorBlue:          _ColorName[18:22],
+ ColorGrey:          _ColorName[22:26],
+ ColorYellow:        _ColorName[26:32],
+ ColorBlueGreen:     _ColorName[32:42],
+ ColorRedOrange:     _ColorName[42:52],
+ ColorYellowGreen:   _ColorName[52:64],
+ ColorRedOrangeBlue: _ColorName[64:79],
 }
 
 // String implements the Stringer interface.
 func (x Color) String() string {
-	if str, ok := _ColorMap[x]; ok {
-		return str
-	}
-	return fmt.Sprintf("Color(%d)", x)
+ if str, ok := _ColorMap[x]; ok {
+  return str
+ }
+ return fmt.Sprintf("Color(%d)", x)
 }
 
 var _ColorValue = map[string]Color{
-	_ColorName[0:5]:                    ColorBlack,
-	strings.ToLower(_ColorName[0:5]):   ColorBlack,
-	_ColorName[5:10]:                   ColorWhite,
-	strings.ToLower(_ColorName[5:10]):  ColorWhite,
-	_ColorName[10:13]:                  ColorRed,
-	strings.ToLower(_ColorName[10:13]): ColorRed,
-	_ColorName[13:18]:                  ColorGreen,
-	strings.ToLower(_ColorName[13:18]): ColorGreen,
-	_ColorName[18:22]:                  ColorBlue,
-	strings.ToLower(_ColorName[18:22]): ColorBlue,
-	_ColorName[22:26]:                  ColorGrey,
-	strings.ToLower(_ColorName[22:26]): ColorGrey,
-	_ColorName[26:32]:                  ColorYellow,
-	strings.ToLower(_ColorName[26:32]): ColorYellow,
-	_ColorName[32:42]:                  ColorBlueGreen,
-	strings.ToLower(_ColorName[32:42]): ColorBlueGreen,
-	_ColorName[42:52]:                  ColorRedOrange,
-	strings.ToLower(_ColorName[42:52]): ColorRedOrange,
-	_ColorName[52:64]:                  ColorYellowGreen,
-	strings.ToLower(_ColorName[52:64]): ColorYellowGreen,
-	_ColorName[64:79]:                  ColorRedOrangeBlue,
-	strings.ToLower(_ColorName[64:79]): ColorRedOrangeBlue,
+ _ColorName[0:5]:                    ColorBlack,
+ strings.ToLower(_ColorName[0:5]):   ColorBlack,
+ _ColorName[5:10]:                   ColorWhite,
+ strings.ToLower(_ColorName[5:10]):  ColorWhite,
+ _ColorName[10:13]:                  ColorRed,
+ strings.ToLower(_ColorName[10:13]): ColorRed,
+ _ColorName[13:18]:                  ColorGreen,
+ strings.ToLower(_ColorName[13:18]): ColorGreen,
+ _ColorName[18:22]:                  ColorBlue,
+ strings.ToLower(_ColorName[18:22]): ColorBlue,
+ _ColorName[22:26]:                  ColorGrey,
+ strings.ToLower(_ColorName[22:26]): ColorGrey,
+ _ColorName[26:32]:                  ColorYellow,
+ strings.ToLower(_ColorName[26:32]): ColorYellow,
+ _ColorName[32:42]:                  ColorBlueGreen,
+ strings.ToLower(_ColorName[32:42]): ColorBlueGreen,
+ _ColorName[42:52]:                  ColorRedOrange,
+ strings.ToLower(_ColorName[42:52]): ColorRedOrange,
+ _ColorName[52:64]:                  ColorYellowGreen,
+ strings.ToLower(_ColorName[52:64]): ColorYellowGreen,
+ _ColorName[64:79]:                  ColorRedOrangeBlue,
+ strings.ToLower(_ColorName[64:79]): ColorRedOrangeBlue,
 }
 
 // ParseColor attempts to convert a string to a Color
 func ParseColor(name string) (Color, error) {
-	if x, ok := _ColorValue[name]; ok {
-		return x, nil
-	}
-	return Color(0), fmt.Errorf("%s is not a valid Color", name)
+ if x, ok := _ColorValue[name]; ok {
+  return x, nil
+ }
+ return Color(0), fmt.Errorf("%s is not a valid Color", name)
 }
 
 func (x Color) Ptr() *Color {
-	return &x
+ return &x
 }
 
 // MarshalText implements the text marshaller method
 func (x Color) MarshalText() ([]byte, error) {
-	return []byte(x.String()), nil
+ return []byte(x.String()), nil
 }
 
 // UnmarshalText implements the text unmarshaller method
 func (x *Color) UnmarshalText(text []byte) error {
-	name := string(text)
-	tmp, err := ParseColor(name)
-	if err != nil {
-		return err
-	}
-	*x = tmp
-	return nil
+ name := string(text)
+ tmp, err := ParseColor(name)
+ if err != nil {
+  return err
+ }
+ *x = tmp
+ return nil
 }
 ```
diff --git a/generator/generator.go b/generator/generator.go
index c54dd64..111e8e0 100644
--- a/generator/generator.go
+++ b/generator/generator.go
@@ -260,6 +260,7 @@ func (g *Generator) Generate(f *ast.File) ([]byte, error) {
 	}
 	sort.Strings(keys)
 
+	var created int
 	for _, name := range keys {
 		ts := enums[name]
 
@@ -269,6 +270,7 @@ func (g *Generator) Generate(f *ast.File) ([]byte, error) {
 			continue
 		}
 
+		created++
 		data := map[string]interface{}{
 			"enum":       enum,
 			"name":       name,
@@ -298,6 +300,11 @@ func (g *Generator) Generate(f *ast.File) ([]byte, error) {
 		}
 	}
 
+	if created < 1 {
+		// Don't save anything if we didn't actually generate any successful enums.
+		return nil, nil
+	}
+
 	formatted, err := imports.Process(pkg, vBuff.Bytes(), nil)
 	if err != nil {
 		err = fmt.Errorf("generate: error formatting code %s\n\n%s", err, vBuff.String())
@@ -338,6 +345,9 @@ func (g *Generator) parseEnum(ts *ast.TypeSpec) (*Enum, error) {
 	}
 
 	enumDecl := getEnumDeclFromComments(ts.Doc.List)
+	if enumDecl == "" {
+		return nil, errors.New("failed parsing enum")
+	}
 
 	values := strings.Split(strings.TrimSuffix(strings.TrimPrefix(enumDecl, `ENUM(`), `)`), `,`)
 	var (
@@ -530,6 +540,7 @@ func getEnumDeclFromComments(comments []*ast.Comment) string {
 
 	if enumParamLevel > 0 {
 		fmt.Println("ENUM Parse error, there is a dangling '(' in your comment.")
+		return ""
 	}
 	joined := fmt.Sprintf("ENUM(%s)", strings.Join(parts, `,`))
 	return joined
diff --git a/go.mod b/go.mod
index 32df209..891451d 100644
--- a/go.mod
+++ b/go.mod
@@ -13,29 +13,29 @@ require (
 	github.com/spf13/pflag v1.0.5
 	github.com/stretchr/testify v1.7.2
 	github.com/urfave/cli/v2 v2.8.1
-	golang.org/x/tools v0.1.10
+	golang.org/x/tools v0.1.11
 )
 
 require (
 	github.com/Masterminds/goutils v1.1.1 // indirect
 	github.com/Masterminds/semver v1.5.0 // indirect
-	github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
+	github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
-	github.com/google/uuid v1.2.0 // indirect
+	github.com/google/uuid v1.3.0 // indirect
 	github.com/huandu/xstrings v1.3.2 // indirect
-	github.com/imdario/mergo v0.3.12 // indirect
+	github.com/imdario/mergo v0.3.13 // indirect
 	github.com/kr/pretty v0.3.0 // indirect
-	github.com/mattn/go-colorable v0.1.11 // indirect
+	github.com/mattn/go-colorable v0.1.12 // indirect
 	github.com/mattn/go-isatty v0.0.14 // indirect
-	github.com/mitchellh/copystructure v1.1.2 // indirect
-	github.com/mitchellh/reflectwalk v1.0.1 // indirect
+	github.com/mitchellh/copystructure v1.2.0 // indirect
+	github.com/mitchellh/reflectwalk v1.0.2 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
-	golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
-	golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
-	golang.org/x/sys v0.0.0-20211103235746-7861aae1554b // indirect
-	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+	golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
+	golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
+	golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect
+	golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
 )
diff --git a/go.sum b/go.sum
index f036003..1a7720f 100644
--- a/go.sum
+++ b/go.sum
@@ -9,6 +9,8 @@ github.com/bradleyjkemp/cupaloy v2.3.0+incompatible h1:UafIjBvWQmS9i/xRg+CamMrnL
 github.com/bradleyjkemp/cupaloy v2.3.0+incompatible/go.mod h1:Au1Xw1sgaJ5iSFktEhYsS0dbQiS1B0/XMXl+42y9Ilk=
 github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
 github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
+github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -17,10 +19,14 @@ github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
 github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
 github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
 github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
 github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
 github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
 github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
+github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
 github.com/kevinburke/go-bindata v3.23.0+incompatible h1:rqNOXZlqrYhMVVAsQx8wuc+LaA73YcfbQ407wAykyS8=
 github.com/kevinburke/go-bindata v3.23.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -35,14 +41,20 @@ github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o
 github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
 github.com/mattn/go-colorable v0.1.11 h1:nQ+aFkoE2TMGc0b68U2OKSexC+eq46+XwZzWXHRmPYs=
 github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
+github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
+github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/goveralls v0.0.11 h1:eJXea6R6IFlL1QMKNMzDvvHv/hwGrnvyig4N+0+XiMM=
 github.com/mattn/goveralls v0.0.11/go.mod h1:gU8SyhNswsJKchEV93xRQxX6X3Ei4PJdQk/6ZHvrvRk=
 github.com/mitchellh/copystructure v1.1.2 h1:Th2TIvG1+6ma3e/0/bopBKohOTY7s4dA8V2q4EUcBJ0=
 github.com/mitchellh/copystructure v1.1.2/go.mod h1:EBArHfARyrSWO/+Wyr9zwEkc6XMFB9XyNgFNmRkZZU4=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
 github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE=
 github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -69,14 +81,19 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
+golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
 golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -91,6 +108,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211103235746-7861aae1554b h1:1VkfZQv42XQlA/jchYumAnv1UPo6RgF9rJFkTgZIxO4=
 golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU=
+golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -101,10 +120,14 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
 golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
+golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY=
+golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0=
+golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
@@ -115,5 +138,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=


Test patch:
diff --git a/example/animal.go b/_example/animal.go
similarity index 100%
rename from example/animal.go
rename to _example/animal.go
diff --git a/example/animal_enum.go b/_example/animal_enum.go
similarity index 100%
rename from example/animal_enum.go
rename to _example/animal_enum.go
diff --git a/example/animal_test.go b/_example/animal_test.go
similarity index 100%
rename from example/animal_test.go
rename to _example/animal_test.go
diff --git a/example/color.go b/_example/color.go
similarity index 100%
rename from example/color.go
rename to _example/color.go
diff --git a/example/color_enum.go b/_example/color_enum.go
similarity index 100%
rename from example/color_enum.go
rename to _example/color_enum.go
diff --git a/example/color_test.go b/_example/color_test.go
similarity index 100%
rename from example/color_test.go
rename to _example/color_test.go
diff --git a/example/commented.go b/_example/commented.go
similarity index 100%
rename from example/commented.go
rename to _example/commented.go
diff --git a/example/commented_enum.go b/_example/commented_enum.go
similarity index 100%
rename from example/commented_enum.go
rename to _example/commented_enum.go
diff --git a/example/commented_test.go b/_example/commented_test.go
similarity index 100%
rename from example/commented_test.go
rename to _example/commented_test.go
diff --git a/example/custom_prefix.go b/_example/custom_prefix.go
similarity index 100%
rename from example/custom_prefix.go
rename to _example/custom_prefix.go
diff --git a/example/custom_prefix_enum.go b/_example/custom_prefix_enum.go
similarity index 100%
rename from example/custom_prefix_enum.go
rename to _example/custom_prefix_enum.go
diff --git a/example/custom_prefix_test.go b/_example/custom_prefix_test.go
similarity index 100%
rename from example/custom_prefix_test.go
rename to _example/custom_prefix_test.go
diff --git a/example/enum_32_bit.go b/_example/enum_32_bit.go
similarity index 100%
rename from example/enum_32_bit.go
rename to _example/enum_32_bit.go
diff --git a/example/enum_32_bit_enum.go b/_example/enum_32_bit_enum.go
similarity index 100%
rename from example/enum_32_bit_enum.go
rename to _example/enum_32_bit_enum.go
diff --git a/example/enum_32_bit_test.go b/_example/enum_32_bit_test.go
similarity index 100%
rename from example/enum_32_bit_test.go
rename to _example/enum_32_bit_test.go
diff --git a/example/enum_64_bit.go b/_example/enum_64_bit.go
similarity index 100%
rename from example/enum_64_bit.go
rename to _example/enum_64_bit.go
diff --git a/example/enum_64_bit_enum.go b/_example/enum_64_bit_enum.go
similarity index 100%
rename from example/enum_64_bit_enum.go
rename to _example/enum_64_bit_enum.go
diff --git a/example/enum_64_bit_test.go b/_example/enum_64_bit_test.go
similarity index 100%
rename from example/enum_64_bit_test.go
rename to _example/enum_64_bit_test.go
diff --git a/example/example.go b/_example/example.go
similarity index 100%
rename from example/example.go
rename to _example/example.go
diff --git a/example/example_enum.go b/_example/example_enum.go
similarity index 100%
rename from example/example_enum.go
rename to _example/example_enum.go
diff --git a/example/example_test.go b/_example/example_test.go
similarity index 100%
rename from example/example_test.go
rename to _example/example_test.go
diff --git a/example/force_lower.go b/_example/force_lower.go
similarity index 100%
rename from example/force_lower.go
rename to _example/force_lower.go
diff --git a/example/force_lower_enum.go b/_example/force_lower_enum.go
similarity index 100%
rename from example/force_lower_enum.go
rename to _example/force_lower_enum.go
diff --git a/example/force_lower_test.go b/_example/force_lower_test.go
similarity index 100%
rename from example/force_lower_test.go
rename to _example/force_lower_test.go
diff --git a/example/globs/gen.go b/_example/globs/gen.go
similarity index 100%
rename from example/globs/gen.go
rename to _example/globs/gen.go
diff --git a/example/globs/letter.go b/_example/globs/letter.go
similarity index 100%
rename from example/globs/letter.go
rename to _example/globs/letter.go
diff --git a/example/globs/letter_enum.go b/_example/globs/letter_enum.go
similarity index 100%
rename from example/globs/letter_enum.go
rename to _example/globs/letter_enum.go
diff --git a/example/globs/number.go b/_example/globs/number.go
similarity index 100%
rename from example/globs/number.go
rename to _example/globs/number.go
diff --git a/example/globs/number_enum.go b/_example/globs/number_enum.go
similarity index 100%
rename from example/globs/number_enum.go
rename to _example/globs/number_enum.go
diff --git a/example/negative.go b/_example/negative.go
similarity index 100%
rename from example/negative.go
rename to _example/negative.go
diff --git a/example/negative_enum.go b/_example/negative_enum.go
similarity index 100%
rename from example/negative_enum.go
rename to _example/negative_enum.go
diff --git a/example/negative_test.go b/_example/negative_test.go
similarity index 100%
rename from example/negative_test.go
rename to _example/negative_test.go
diff --git a/example/sql.go b/_example/sql.go
similarity index 100%
rename from example/sql.go
rename to _example/sql.go
diff --git a/example/sql_1_11_test.go b/_example/sql_1_11_test.go
similarity index 100%
rename from example/sql_1_11_test.go
rename to _example/sql_1_11_test.go
diff --git a/example/sql_enum.go b/_example/sql_enum.go
similarity index 100%
rename from example/sql_enum.go
rename to _example/sql_enum.go
diff --git a/example/sql_int.go b/_example/sql_int.go
similarity index 100%
rename from example/sql_int.go
rename to _example/sql_int.go
diff --git a/example/sql_int_enum.go b/_example/sql_int_enum.go
similarity index 100%
rename from example/sql_int_enum.go
rename to _example/sql_int_enum.go
diff --git a/example/sql_int_enum_test.go b/_example/sql_int_enum_test.go
similarity index 100%
rename from example/sql_int_enum_test.go
rename to _example/sql_int_enum_test.go
diff --git a/example/sql_mock_test.go b/_example/sql_mock_test.go
similarity index 100%
rename from example/sql_mock_test.go
rename to _example/sql_mock_test.go
diff --git a/example/sql_str.go b/_example/sql_str.go
similarity index 100%
rename from example/sql_str.go
rename to _example/sql_str.go
diff --git a/example/sql_str_enum.go b/_example/sql_str_enum.go
similarity index 100%
rename from example/sql_str_enum.go
rename to _example/sql_str_enum.go
diff --git a/example/sql_str_enum_test.go b/_example/sql_str_enum_test.go
similarity index 100%
rename from example/sql_str_enum_test.go
rename to _example/sql_str_enum_test.go
diff --git a/example/sql_test.go b/_example/sql_test.go
similarity index 100%
rename from example/sql_test.go
rename to _example/sql_test.go
diff --git a/example/user_globbed.tmpl b/_example/user_globbed.tmpl
similarity index 100%
rename from example/user_globbed.tmpl
rename to _example/user_globbed.tmpl
diff --git a/example/user_globbed2.tmpl b/_example/user_globbed2.tmpl
similarity index 100%
rename from example/user_globbed2.tmpl
rename to _example/user_globbed2.tmpl
diff --git a/example/user_template.go b/_example/user_template.go
similarity index 100%
rename from example/user_template.go
rename to _example/user_template.go
diff --git a/example/user_template.tmpl b/_example/user_template.tmpl
similarity index 100%
rename from example/user_template.tmpl
rename to _example/user_template.tmpl
diff --git a/example/user_template_enum.go b/_example/user_template_enum.go
similarity index 100%
rename from example/user_template_enum.go
rename to _example/user_template_enum.go
diff --git a/example/user_template_test.go b/_example/user_template_test.go
similarity index 100%
rename from example/user_template_test.go
rename to _example/user_template_test.go
diff --git a/generator/.snapshots/Test118ExampleFileMoreOptions-1.18 b/generator/.snapshots/Test118ExampleFileMoreOptions-1.18
new file mode 100644
index 0000000..b55dfa1
--- /dev/null
+++ b/generator/.snapshots/Test118ExampleFileMoreOptions-1.18
@@ -0,0 +1,180 @@
+([]string) (len=178) {
+  (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=6) "\t\"fmt\"",
+  (string) (len=10) "\t\"strings\"",
+  (string) "",
+  (string) (len=24) "\t\"github.com/pkg/errors\"",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=7) "const (",
+  (string) (len=52) "\t// ChangeTypeCreate is a ChangeType of type Create.",
+  (string) (len=35) "\tChangeTypeCreate ChangeType = iota",
+  (string) (len=52) "\t// ChangeTypeUpdate is a ChangeType of type Update.",
+  (string) (len=17) "\tChangeTypeUpdate",
+  (string) (len=52) "\t// ChangeTypeDelete is a ChangeType of type Delete.",
+  (string) (len=17) "\tChangeTypeDelete",
+  (string) (len=1) ")",
+  (string) "",
+  (string) (len=44) "const _ChangeTypeName = \"createupdatedelete\"",
+  (string) "",
+  (string) (len=32) "var _ChangeTypeNames = []string{",
+  (string) (len=22) "\t_ChangeTypeName[0:6],",
+  (string) (len=23) "\t_ChangeTypeName[6:12],",
+  (string) (len=24) "\t_ChangeTypeName[12:18],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=74) "// ChangeTypeNames returns a list of possible string values of ChangeType.",
+  (string) (len=33) "func ChangeTypeNames() []string {",
+  (string) (len=45) "\ttmp := make([]string, len(_ChangeTypeNames))",
+  (string) (len=28) "\tcopy(tmp, _ChangeTypeNames)",
+  (string) (len=11) "\treturn tmp",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=43) "var _ChangeTypeMap = map[ChangeType]string{",
+  (string) (len=40) "\tChangeTypeCreate: _ChangeTypeName[0:6],",
+  (string) (len=41) "\tChangeTypeUpdate: _ChangeTypeName[6:12],",
+  (string) (len=42) "\tChangeTypeDelete: _ChangeTypeName[12:18],",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=44) "// String implements the Stringer interface.",
+  (string) (len=37) "func (x ChangeType) String() string {",
+  (string) (len=38) "\tif str, ok := _ChangeTypeMap[x]; ok {",
+  (string) (len=12) "\t\treturn str",
+  (string) (len=2) "\t}",
+  (string) (len=40) "\treturn fmt.Sprintf(\"ChangeType(%d)\", x)",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=45) "var _ChangeTypeValue = map[string]ChangeType{",
+  (string) (len=59) "\t_ChangeTypeName[0:6]:                    ChangeTypeCreate,",
+  (string) (len=59) "\tstrings.ToLower(_ChangeTypeName[0:6]):   ChangeTypeCreate,",
+  (string) (len=59) "\t_ChangeTypeName[6:12]:                   ChangeTypeUpdate,",
+  (string) (len=59) "\tstrings.ToLower(_ChangeTypeName[6:12]):  ChangeTypeUpdate,",
+  (string) (len=59) "\t_ChangeTypeName[12:18]:                  ChangeTypeDelete,",
+  (string) (len=59) "\tstrings.ToLower(_ChangeTypeName[12:18]): ChangeTypeDelete,",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=64) "// ParseChangeType attempts to convert a string to a ChangeType.",
+  (string) (len=55) "func ParseChangeType(name string) (ChangeType, error) {",
+  (string) (len=41) "\tif x, ok := _ChangeTypeValue[name]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=58) "\tif x, ok := _ChangeTypeValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=119) "\treturn ChangeType(0), fmt.Errorf(\"%s is not a valid ChangeType, try [%s]\", name, strings.Join(_ChangeTypeNames, \", \"))",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=85) "// MustParseChangeType converts a string to a ChangeType, and panics if is not valid.",
+  (string) (len=50) "func MustParseChangeType(name string) ChangeType {",
+  (string) (len=34) "\tval, err := ParseChangeType(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 ChangeType) 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 *ChangeType) UnmarshalText(text []byte) error {",
+  (string) (len=21) "\tname := string(text)",
+  (string) (len=34) "\ttmp, err := ParseChangeType(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=97) "var _ChangeTypeErrNilPtr = 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 *ChangeType) Scan(value interface{}) (err error) {",
+  (string) (len=18) "\tif value == nil {",
+  (string) (len=20) "\t\t*x = ChangeType(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 = ChangeType(v)",
+  (string) (len=13) "\tcase string:",
+  (string) (len=30) "\t\t*x, err = ParseChangeType(v)",
+  (string) (len=13) "\tcase []byte:",
+  (string) (len=38) "\t\t*x, err = ParseChangeType(string(v))",
+  (string) (len=17) "\tcase ChangeType:",
+  (string) (len=8) "\t\t*x = v",
+  (string) (len=10) "\tcase int:",
+  (string) (len=20) "\t\t*x = ChangeType(v)",
+  (string) (len=18) "\tcase *ChangeType:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=9) "\t\t*x = *v",
+  (string) (len=11) "\tcase uint:",
+  (string) (len=20) "\t\t*x = ChangeType(v)",
+  (string) (len=13) "\tcase uint64:",
+  (string) (len=20) "\t\t*x = ChangeType(v)",
+  (string) (len=11) "\tcase *int:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = ChangeType(*v)",
+  (string) (len=13) "\tcase *int64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = ChangeType(*v)",
+  (string) (len=72) "\tcase float64: // json marshals everything as a float64 if it's a number",
+  (string) (len=20) "\t\t*x = ChangeType(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=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = ChangeType(*v)",
+  (string) (len=12) "\tcase *uint:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = ChangeType(*v)",
+  (string) (len=14) "\tcase *uint64:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=21) "\t\t*x = ChangeType(*v)",
+  (string) (len=14) "\tcase *string:",
+  (string) (len=15) "\t\tif v == nil {",
+  (string) (len=30) "\t\t\treturn _ChangeTypeErrNilPtr",
+  (string) (len=3) "\t\t}",
+  (string) (len=31) "\t\t*x, err = ParseChangeType(*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 ChangeType) Value() (driver.Value, error) {",
+  (string) (len=23) "\treturn x.String(), nil",
+  (string) (len=1) "}",
+  (string) "",
+  (string) (len=22) "// Additional template",
+  (string) (len=36) "func ParseChangeTypeExample() bool {",
+  (string) (len=12) "\treturn true",
+  (string) (len=1) "}",
+  (string) ""
+}
diff --git a/generator/.snapshots/Test118ExampleFileMoreOptions-og b/generator/.snapshots/Test118ExampleFileMoreOptions-og
new file mode 100644
index 0000000..b334af4
--- /dev/null
+++ b/generator/.snapshots/Test118ExampleFileMoreOptions-og
@@ -0,0 +1,2379 @@
+([]string) (len=2377) {
+  (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=6) "\t\"fmt\"",
+  (string) (len=10) "\t\"strings\"",
+  (string) "",
+  (string) (len=24) "\t\"github.com/pkg/errors\"",
+  (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=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=37) "var _AnimalValue = map[string]Animal{",
+  (string) (len=47) "\t_AnimalName[0:3]:                   AnimalCat,",
+  (string) (len=47) "\tstrings.ToLower(_AnimalName[0:3]):  AnimalCat,",
+  (string) (len=47) "\t_AnimalName[3:6]:                   AnimalDog,",
+  (string) (len=47) "\tstrings.ToLower(_AnimalName[3:6]):  AnimalDog,",
+  (string) (len=48) "\t_AnimalName[6:10]:                  AnimalFish,",
+  (string) (len=48) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=54) "\tif x, ok := _AnimalValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=107) "\treturn Animal(0), fmt.Errorf(\"%s is not a valid Animal, try [%s]\", name, strings.Join(_AnimalNames, \", \"))",
+  (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=93) "var _AnimalErrNilPtr = 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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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=26) "\t\t\treturn _AnimalErrNilPtr",
+  (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) "",
+  (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=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=35) "var _CasesValue = map[string]Cases{",
+  (string) (len=53) "\t_CasesName[0:10]:                   CasesTest_lower,",
+  (string) (len=53) "\tstrings.ToLower(_CasesName[0:10]):  CasesTest_lower,",
+  (string) (len=55) "\t_CasesName[10:22]:                  CasesTest_capital,",
+  (string) (len=55) "\tstrings.ToLower(_CasesName[10:22]): CasesTest_capital,",
+  (string) (len=64) "\t_CasesName[22:43]:                  CasesAnotherLowerCaseStart,",
+  (string) (len=64) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=53) "\tif x, ok := _CasesValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=104) "\treturn Cases(0), fmt.Errorf(\"%s is not a valid Cases, try [%s]\", name, strings.Join(_CasesNames, \", \"))",
+  (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=92) "var _CasesErrNilPtr = 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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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=25) "\t\t\treturn _CasesErrNilPtr",
+  (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) "",
+  (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=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=35) "var _ColorValue = map[string]Color{",
+  (string) (len=48) "\t_ColorName[0:5]:                    ColorBlack,",
+  (string) (len=48) "\tstrings.ToLower(_ColorName[0:5]):   ColorBlack,",
+  (string) (len=48) "\t_ColorName[5:10]:                   ColorWhite,",
+  (string) (len=48) "\tstrings.ToLower(_ColorName[5:10]):  ColorWhite,",
+  (string) (len=46) "\t_ColorName[10:13]:                  ColorRed,",
+  (string) (len=46) "\tstrings.ToLower(_ColorName[10:13]): ColorRed,",
+  (string) (len=48) "\t_ColorName[13:18]:                  ColorGreen,",
+  (string) (len=48) "\tstrings.ToLower(_ColorName[13:18]): ColorGreen,",
+  (string) (len=47) "\t_ColorName[18:22]:                  ColorBlue,",
+  (string) (len=47) "\tstrings.ToLower(_ColorName[18:22]): ColorBlue,",
+  (string) (len=47) "\t_ColorName[22:26]:                  ColorGrey,",
+  (string) (len=47) "\tstrings.ToLower(_ColorName[22:26]): ColorGrey,",
+  (string) (len=49) "\t_ColorName[26:32]:                  ColorYellow,",
+  (string) (len=49) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=53) "\tif x, ok := _ColorValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=104) "\treturn Color(0), fmt.Errorf(\"%s is not a valid Color, try [%s]\", name, strings.Join(_ColorNames, \", \"))",
+  (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=92) "var _ColorErrNilPtr = 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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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=25) "\t\t\treturn _ColorErrNilPtr",
+  (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) "",
+  (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=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=57) "var _ColorWithCommentValue = map[string]ColorWithComment{",
+  (string) (len=70) "\t_ColorWithCommentName[0:5]:                    ColorWithCommentBlack,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithCommentName[0:5]):   ColorWithCommentBlack,",
+  (string) (len=70) "\t_ColorWithCommentName[5:10]:                   ColorWithCommentWhite,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithCommentName[5:10]):  ColorWithCommentWhite,",
+  (string) (len=68) "\t_ColorWithCommentName[10:13]:                  ColorWithCommentRed,",
+  (string) (len=68) "\tstrings.ToLower(_ColorWithCommentName[10:13]): ColorWithCommentRed,",
+  (string) (len=70) "\t_ColorWithCommentName[13:18]:                  ColorWithCommentGreen,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithCommentName[13:18]): ColorWithCommentGreen,",
+  (string) (len=69) "\t_ColorWithCommentName[18:22]:                  ColorWithCommentBlue,",
+  (string) (len=69) "\tstrings.ToLower(_ColorWithCommentName[18:22]): ColorWithCommentBlue,",
+  (string) (len=69) "\t_ColorWithCommentName[22:26]:                  ColorWithCommentGrey,",
+  (string) (len=69) "\tstrings.ToLower(_ColorWithCommentName[22:26]): ColorWithCommentGrey,",
+  (string) (len=71) "\t_ColorWithCommentName[26:32]:                  ColorWithCommentYellow,",
+  (string) (len=71) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=64) "\tif x, ok := _ColorWithCommentValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=137) "\treturn ColorWithComment(0), fmt.Errorf(\"%s is not a valid ColorWithComment, try [%s]\", name, strings.Join(_ColorWithCommentNames, \", \"))",
+  (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=103) "var _ColorWithCommentErrNilPtr = 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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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=36) "\t\t\treturn _ColorWithCommentErrNilPtr",
+  (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) "",
+  (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=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=59) "var _ColorWithComment2Value = map[string]ColorWithComment2{",
+  (string) (len=72) "\t_ColorWithComment2Name[0:5]:                    ColorWithComment2Black,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment2Name[0:5]):   ColorWithComment2Black,",
+  (string) (len=72) "\t_ColorWithComment2Name[5:10]:                   ColorWithComment2White,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment2Name[5:10]):  ColorWithComment2White,",
+  (string) (len=70) "\t_ColorWithComment2Name[10:13]:                  ColorWithComment2Red,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithComment2Name[10:13]): ColorWithComment2Red,",
+  (string) (len=72) "\t_ColorWithComment2Name[13:18]:                  ColorWithComment2Green,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment2Name[13:18]): ColorWithComment2Green,",
+  (string) (len=71) "\t_ColorWithComment2Name[18:22]:                  ColorWithComment2Blue,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment2Name[18:22]): ColorWithComment2Blue,",
+  (string) (len=71) "\t_ColorWithComment2Name[22:26]:                  ColorWithComment2Grey,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment2Name[22:26]): ColorWithComment2Grey,",
+  (string) (len=73) "\t_ColorWithComment2Name[26:32]:                  ColorWithComment2Yellow,",
+  (string) (len=73) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=65) "\tif x, ok := _ColorWithComment2Value[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=140) "\treturn ColorWithComment2(0), fmt.Errorf(\"%s is not a valid ColorWithComment2, try [%s]\", name, strings.Join(_ColorWithComment2Names, \", \"))",
+  (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=104) "var _ColorWithComment2ErrNilPtr = 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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment2ErrNilPtr",
+  (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) "",
+  (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=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=59) "var _ColorWithComment3Value = map[string]ColorWithComment3{",
+  (string) (len=72) "\t_ColorWithComment3Name[0:5]:                    ColorWithComment3Black,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment3Name[0:5]):   ColorWithComment3Black,",
+  (string) (len=72) "\t_ColorWithComment3Name[5:10]:                   ColorWithComment3White,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment3Name[5:10]):  ColorWithComment3White,",
+  (string) (len=70) "\t_ColorWithComment3Name[10:13]:                  ColorWithComment3Red,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithComment3Name[10:13]): ColorWithComment3Red,",
+  (string) (len=72) "\t_ColorWithComment3Name[13:18]:                  ColorWithComment3Green,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment3Name[13:18]): ColorWithComment3Green,",
+  (string) (len=71) "\t_ColorWithComment3Name[18:22]:                  ColorWithComment3Blue,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment3Name[18:22]): ColorWithComment3Blue,",
+  (string) (len=71) "\t_ColorWithComment3Name[22:26]:                  ColorWithComment3Grey,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment3Name[22:26]): ColorWithComment3Grey,",
+  (string) (len=73) "\t_ColorWithComment3Name[26:32]:                  ColorWithComment3Yellow,",
+  (string) (len=73) "\tstrings.ToLower(_ColorWithComment3Name[26:32]): ColorWithComment3Yellow,",
+  (string) (len=76) "\t_ColorWithComment3Name[32:42]:                  ColorWithComment3BlueGreen,",
+  (string) (len=76) "\tstrings.ToLower(_ColorWithComment3Name[32:42]): ColorWithComment3BlueGreen,",
+  (string) (len=76) "\t_ColorWithComment3Name[42:52]:                  ColorWithComment3RedOrange,",
+  (string) (len=76) "\tstrings.ToLower(_ColorWithComment3Name[42:52]): ColorWithComment3RedOrange,",
+  (string) (len=80) "\t_ColorWithComment3Name[52:67]:                  ColorWithComment3RedOrangeBlue,",
+  (string) (len=80) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=65) "\tif x, ok := _ColorWithComment3Value[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=140) "\treturn ColorWithComment3(0), fmt.Errorf(\"%s is not a valid ColorWithComment3, try [%s]\", name, strings.Join(_ColorWithComment3Names, \", \"))",
+  (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=104) "var _ColorWithComment3ErrNilPtr = 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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment3ErrNilPtr",
+  (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) "",
+  (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=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=59) "var _ColorWithComment4Value = map[string]ColorWithComment4{",
+  (string) (len=72) "\t_ColorWithComment4Name[0:5]:                    ColorWithComment4Black,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment4Name[0:5]):   ColorWithComment4Black,",
+  (string) (len=72) "\t_ColorWithComment4Name[5:10]:                   ColorWithComment4White,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment4Name[5:10]):  ColorWithComment4White,",
+  (string) (len=70) "\t_ColorWithComment4Name[10:13]:                  ColorWithComment4Red,",
+  (string) (len=70) "\tstrings.ToLower(_ColorWithComment4Name[10:13]): ColorWithComment4Red,",
+  (string) (len=72) "\t_ColorWithComment4Name[13:18]:                  ColorWithComment4Green,",
+  (string) (len=72) "\tstrings.ToLower(_ColorWithComment4Name[13:18]): ColorWithComment4Green,",
+  (string) (len=71) "\t_ColorWithComment4Name[18:22]:                  ColorWithComment4Blue,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment4Name[18:22]): ColorWithComment4Blue,",
+  (string) (len=71) "\t_ColorWithComment4Name[22:26]:                  ColorWithComment4Grey,",
+  (string) (len=71) "\tstrings.ToLower(_ColorWithComment4Name[22:26]): ColorWithComment4Grey,",
+  (string) (len=73) "\t_ColorWithComment4Name[26:32]:                  ColorWithComment4Yellow,",
+  (string) (len=73) "\tstrings.ToLower(_ColorWithComment4Name[26:32]): ColorWithComment4Yellow,",
+  (string) (len=76) "\t_ColorWithComment4Name[32:42]:                  ColorWithComment4BlueGreen,",
+  (string) (len=76) "\tstrings.ToLower(_ColorWithComment4Name[32:42]): ColorWithComment4BlueGreen,",
+  (string) (len=76) "\t_ColorWithComment4Name[42:52]:                  ColorWithComment4RedOrange,",
+  (string) (len=76) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=65) "\tif x, ok := _ColorWithComment4Value[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=140) "\treturn ColorWithComment4(0), fmt.Errorf(\"%s is not a valid ColorWithComment4, try [%s]\", name, strings.Join(_ColorWithComment4Names, \", \"))",
+  (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=104) "var _ColorWithComment4ErrNilPtr = 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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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=37) "\t\t\treturn _ColorWithComment4ErrNilPtr",
+  (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) "",
+  (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=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=43) "var _Enum64bitValue = map[string]Enum64bit{",
+  (string) (len=58) "\t_Enum64bitName[0:7]:                    Enum64bitUnknown,",
+  (string) (len=58) "\tstrings.ToLower(_Enum64bitName[0:7]):   Enum64bitUnknown,",
+  (string) (len=56) "\t_Enum64bitName[7:12]:                   Enum64bitE2P15,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[7:12]):  Enum64bitE2P15,",
+  (string) (len=56) "\t_Enum64bitName[12:17]:                  Enum64bitE2P16,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[12:17]): Enum64bitE2P16,",
+  (string) (len=56) "\t_Enum64bitName[17:22]:                  Enum64bitE2P17,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[17:22]): Enum64bitE2P17,",
+  (string) (len=56) "\t_Enum64bitName[22:27]:                  Enum64bitE2P18,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[22:27]): Enum64bitE2P18,",
+  (string) (len=56) "\t_Enum64bitName[27:32]:                  Enum64bitE2P19,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[27:32]): Enum64bitE2P19,",
+  (string) (len=56) "\t_Enum64bitName[32:37]:                  Enum64bitE2P20,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[32:37]): Enum64bitE2P20,",
+  (string) (len=56) "\t_Enum64bitName[37:42]:                  Enum64bitE2P21,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[37:42]): Enum64bitE2P21,",
+  (string) (len=56) "\t_Enum64bitName[42:47]:                  Enum64bitE2P22,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[42:47]): Enum64bitE2P22,",
+  (string) (len=56) "\t_Enum64bitName[47:52]:                  Enum64bitE2P23,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[47:52]): Enum64bitE2P23,",
+  (string) (len=56) "\t_Enum64bitName[52:57]:                  Enum64bitE2P28,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[52:57]): Enum64bitE2P28,",
+  (string) (len=56) "\t_Enum64bitName[57:62]:                  Enum64bitE2P30,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[57:62]): Enum64bitE2P30,",
+  (string) (len=56) "\t_Enum64bitName[62:67]:                  Enum64bitE2P31,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[62:67]): Enum64bitE2P31,",
+  (string) (len=56) "\t_Enum64bitName[67:72]:                  Enum64bitE2P32,",
+  (string) (len=56) "\tstrings.ToLower(_Enum64bitName[67:72]): Enum64bitE2P32,",
+  (string) (len=56) "\t_Enum64bitName[72:77]:                  Enum64bitE2P33,",
+  (string) (len=56) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=57) "\tif x, ok := _Enum64bitValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=116) "\treturn Enum64bit(0), fmt.Errorf(\"%s is not a valid Enum64bit, try [%s]\", name, strings.Join(_Enum64bitNames, \", \"))",
+  (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=96) "var _Enum64bitErrNilPtr = 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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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=29) "\t\t\treturn _Enum64bitErrNilPtr",
+  (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) "",
+  (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=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=35) "var _ModelValue = map[string]Model{",
+  (string) (len=49) "\t_ModelName[0:6]:                    ModelToyota,",
+  (string) (len=49) "\tstrings.ToLower(_ModelName[0:6]):   ModelToyota,",
+  (string) (len=48) "\t_ModelName[6:11]:                   ModelChevy,",
+  (string) (len=48) "\tstrings.ToLower(_ModelName[6:11]):  ModelChevy,",
+  (string) (len=47) "\t_ModelName[11:15]:                  ModelFord,",
+  (string) (len=47) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=53) "\tif x, ok := _ModelValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=104) "\treturn Model(0), fmt.Errorf(\"%s is not a valid Model, try [%s]\", name, strings.Join(_ModelNames, \", \"))",
+  (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=92) "var _ModelErrNilPtr = 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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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=25) "\t\t\treturn _ModelErrNilPtr",
+  (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) "",
+  (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=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=41) "var _NonASCIIValue = map[string]NonASCII{",
+  (string) (len=61) "\t_NonASCIIName[0:12]:                   NonASCIIПродам,",
+  (string) (len=61) "\tstrings.ToLower(_NonASCIIName[0:12]):  NonASCIIПродам,",
+  (string) (len=55) "\t_NonASCIIName[12:18]:                  NonASCII車庫,",
+  (string) (len=55) "\tstrings.ToLower(_NonASCIIName[12:18]): NonASCII車庫,",
+  (string) (len=57) "\t_NonASCIIName[18:26]:                  NonASCIIԷժան,",
+  (string) (len=57) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=56) "\tif x, ok := _NonASCIIValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=113) "\treturn NonASCII(0), fmt.Errorf(\"%s is not a valid NonASCII, try [%s]\", name, strings.Join(_NonASCIINames, \", \"))",
+  (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=95) "var _NonASCIIErrNilPtr = 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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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=28) "\t\t\treturn _NonASCIIErrNilPtr",
+  (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) "",
+  (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=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=45) "var _SanitizingValue = map[string]Sanitizing{",
+  (string) (len=63) "\t_SanitizingName[0:11]:                   SanitizingTestHyphen,",
+  (string) (len=63) "\tstrings.ToLower(_SanitizingName[0:11]):  SanitizingTestHyphen,",
+  (string) (len=64) "\t_SanitizingName[11:23]:                  SanitizingHyphenStart,",
+  (string) (len=64) "\tstrings.ToLower(_SanitizingName[11:23]): SanitizingHyphenStart,",
+  (string) (len=69) "\t_SanitizingName[23:39]:                  Sanitizing_underscoreFirst,",
+  (string) (len=69) "\tstrings.ToLower(_SanitizingName[23:39]): Sanitizing_underscoreFirst,",
+  (string) (len=65) "\t_SanitizingName[39:51]:                  Sanitizing0numberFirst,",
+  (string) (len=65) "\tstrings.ToLower(_SanitizingName[39:51]): Sanitizing0numberFirst,",
+  (string) (len=63) "\t_SanitizingName[51:61]:                  Sanitizing123456789a,",
+  (string) (len=63) "\tstrings.ToLower(_SanitizingName[51:61]): Sanitizing123456789a,",
+  (string) (len=63) "\t_SanitizingName[61:72]:                  Sanitizing123123Asdf,",
+  (string) (len=63) "\tstrings.ToLower(_SanitizingName[61:72]): Sanitizing123123Asdf,",
+  (string) (len=65) "\t_SanitizingName[72:86]:                  SanitizingEndingHyphen,",
+  (string) (len=65) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=58) "\tif x, ok := _SanitizingValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=119) "\treturn Sanitizing(0), fmt.Errorf(\"%s is not a valid Sanitizing, try [%s]\", name, strings.Join(_SanitizingNames, \", \"))",
+  (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=97) "var _SanitizingErrNilPtr = 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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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=30) "\t\t\treturn _SanitizingErrNilPtr",
+  (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) "",
+  (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=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=33) "var _SodaValue = map[string]Soda{",
+  (string) (len=44) "\t_SodaName[0:4]:                   SodaCoke,",
+  (string) (len=44) "\tstrings.ToLower(_SodaName[0:4]):  SodaCoke,",
+  (string) (len=45) "\t_SodaName[4:9]:                   SodaPepsi,",
+  (string) (len=45) "\tstrings.ToLower(_SodaName[4:9]):  SodaPepsi,",
+  (string) (len=46) "\t_SodaName[9:15]:                  SodaMtnDew,",
+  (string) (len=46) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=52) "\tif x, ok := _SodaValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=101) "\treturn Soda(0), fmt.Errorf(\"%s is not a valid Soda, try [%s]\", name, strings.Join(_SodaNames, \", \"))",
+  (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=91) "var _SodaErrNilPtr = 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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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=24) "\t\t\treturn _SodaErrNilPtr",
+  (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) "",
+  (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=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=49) "var _StartNotZeroValue = map[string]StartNotZero{",
+  (string) (len=69) "\t_StartNotZeroName[0:12]:                   StartNotZeroStartWithNum,",
+  (string) (len=69) "\tstrings.ToLower(_StartNotZeroName[0:12]):  StartNotZeroStartWithNum,",
+  (string) (len=64) "\t_StartNotZeroName[12:19]:                  StartNotZeroNextNum,",
+  (string) (len=64) "\tstrings.ToLower(_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=121) "\t// Case insensitive parse, do a separate lookup to prevent unnecessary cost of lowercasing a string if we don't need to.",
+  (string) (len=60) "\tif x, ok := _StartNotZeroValue[strings.ToLower(name)]; ok {",
+  (string) (len=15) "\t\treturn x, nil",
+  (string) (len=2) "\t}",
+  (string) (len=125) "\treturn StartNotZero(0), fmt.Errorf(\"%s is not a valid StartNotZero, try [%s]\", name, strings.Join(_StartNotZeroNames, \", \"))",
+  (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=99) "var _StartNotZeroErrNilPtr = 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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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=32) "\t\t\treturn _StartNotZeroErrNilPtr",
+  (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) ""
+}
diff --git a/generator/generator_1.18_test.go b/generator/generator_1.18_test.go
index 4538318..f061b0e 100644
--- a/generator/generator_1.18_test.go
+++ b/generator/generator_1.18_test.go
@@ -75,6 +75,33 @@ func Test118ExampleFile(t *testing.T) {
 	}
 }
 
+// TestExampleFileMoreOptions
+func Test118ExampleFileMoreOptions(t *testing.T) {
+	g := NewGenerator().
+		WithMarshal().
+		WithSQLDriver().
+		WithCaseInsensitiveParse().
+		WithNames().
+		WithoutSnakeToCamel().
+		WithMustParse().
+		WithForceLower().
+		WithTemplates(`../_example/user_template.tmpl`)
+	for name, testExample := range testExampleFiles {
+		t.Run(name, func(t *testing.T) {
+			// 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 Test118NoPrefixExampleFile(t *testing.T) {
 	g := NewGenerator().
@@ -206,3 +233,91 @@ func Test118AliasParsing(t *testing.T) {
 		})
 	}
 }
+
+// TestEnumParseFailure
+func Test118EnumParseFailure(t *testing.T) {
+	input := `package test
+	// Behavior
+	type SomeInterface interface{
+
+	}
+
+	// ENUM(
+	//	a,
+	//}
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestUintInvalidParsing
+func TestUintInvalidParsing(t *testing.T) {
+	input := `package test
+	// ENUM(
+	//	a=-1,
+	//)
+	type Animal uint
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestIntInvalidParsing
+func Test118IntInvalidParsing(t *testing.T) {
+	input := `package test
+	// ENUM(
+	//	a=c,
+	//)
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestAliasing
+func Test118Aliasing(t *testing.T) {
+	input := `package test
+	// ENUM(a,b,CDEF) with some extra text
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	ParseAliases([]string{"CDEF:C"})
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Contains(t, string(output), "// AnimalC is a Animal of type CDEF.")
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
diff --git a/generator/generator_test.go b/generator/generator_test.go
index 87415d8..b2c605f 100644
--- a/generator/generator_test.go
+++ b/generator/generator_test.go
@@ -10,6 +10,7 @@ import (
 	"testing"
 
 	"github.com/bradleyjkemp/cupaloy"
+	"github.com/pkg/errors"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
@@ -77,7 +78,7 @@ func TestExampleFileMoreOptions(t *testing.T) {
 		WithoutSnakeToCamel().
 		WithMustParse().
 		WithForceLower().
-		WithTemplates(`../example/user_template.tmpl`)
+		WithTemplates(`../_example/user_template.tmpl`)
 	// Parse the file given in arguments
 	imported, err := g.GenerateFromFile(testExample)
 	require.Nil(t, err, "Error generating formatted code")
@@ -163,6 +164,10 @@ func TestAliasParsing(t *testing.T) {
 		"no aliases": {
 			resultingMap: map[string]string{},
 		},
+		"bad input": {
+			input: []string{"a:b,c"},
+			err:   errors.New(`invalid formatted alias entry "c", must be in the format "key:value"`),
+		},
 		"multiple arrays": {
 			input: []string{
 				`!:Bang,a:a`,
@@ -209,3 +214,91 @@ func TestAliasParsing(t *testing.T) {
 		})
 	}
 }
+
+// TestEnumParseFailure
+func TestEnumParseFailure(t *testing.T) {
+	input := `package test
+	// Behavior
+	type SomeInterface interface{
+
+	}
+
+	// ENUM(
+	//	a,
+	//}
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestUintInvalidParsing
+func TestUintInvalidParsing(t *testing.T) {
+	input := `package test
+	// ENUM(
+	//	a=-1,
+	//)
+	type Animal uint
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestIntInvalidParsing
+func TestIntInvalidParsing(t *testing.T) {
+	input := `package test
+	// ENUM(
+	//	a=c,
+	//)
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Empty(t, string(output))
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}
+
+// TestAliasing
+func TestAliasing(t *testing.T) {
+	input := `package test
+	// ENUM(a,b,CDEF) with some extra text
+	type Animal int
+	`
+	g := NewGenerator().
+		WithoutSnakeToCamel()
+	ParseAliases([]string{"CDEF:C"})
+	f, err := parser.ParseFile(g.fileSet, "TestRequiredErrors", input, parser.ParseComments)
+	assert.Nil(t, err, "Error parsing no struct input")
+
+	output, err := g.Generate(f)
+	assert.Nil(t, err, "Error generating formatted code")
+	assert.Contains(t, string(output), "// AnimalC is a Animal of type CDEF.")
+	if false { // Debugging statement
+		fmt.Println(string(output))
+	}
+}