Skip to content

lindell/string-enumer

Repository files navigation

🧵 string-enumer

Go build status GoDoc Go Report Card

String enumer is a golang code generator for enums declared as strings.

The function func (v X) Valid() bool will always be generated on the defined types together with func XValues() []X. But options to generate more code exist. It is especially useful with the --text option, that generates an UnmarshalText function which forces any unmarshaling of the type (via for JSON/XML/etc.) to be limited to the defined types.

The tool is primarily intended to be used with go:generate, but can be used as a separate CLI tool.

Example usage with go generate

//go:generate string-enumer --text -t Country -o ./generated.go . // or //go:generate go run github.com/lindell/string-enumer --text -t Country -o ./generated.go . type Country string const ( CountryCanada Country = "CA" CountryChina Country = "CN" CountrySweden Country = "SE" CountryUnitedStates Country = "US" )

When you run go generate for that package, it will generate:

// Valid validates if a value is a valid Country func (v Country) Valid() bool { ... } // CountryValues returns a list of all (valid) Country values func CountryValues() []Country { ... } // UnmarshalText takes a text, verifies that it is a correct Country and unmarshals it func (v *Country) UnmarshalText(text []byte) error { ... }

(Please click this link for a real example at Go Playgrounds example)

CLI Description:

$ string-enumer --help Usage of string-enumer:	string-enumer [flags] --type T --type T2 [directory]	string-enumer [flags] --type T --type T2 files... # Must be a single package For more information, see:	https://github.com/lindell/string-enumer Flags: -o, --output string output file name; default is stdout -T, --text if set, text unmarshaling methods will be generated. Default: false -t, --type strings the type name(s), can be multiple, but at least on must be set 

About

Code generation for enums defined as strings

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages