Skip to content
An enum generator for Go
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
.gitignore
.goreleaser.yml
.travis.yml
Makefile
README.md
download.sh
enum.go
example.go
go.mod
go.sum
gonum.go
gonum_test.go

README.md

gonum

Build Status

gonum is an enum generator for Go. It is inspired by the powerful enum types found in Java. gonum has the following capabilities

  • Reference an compare enums using values
  • Provide a display value for the enumerated fields
  • Generate an enum instance from a string factory method
  • Generate a slice of display values
  • JSON support
  • Enum instances can be passed as errors since they implement Error() string

Install

From a github release

curl https://raw.githubusercontent.com/steinfletcher/gonum/master/download.sh | sh
mv bin/gonum /usr/local/bin

OR

go get -u github.com/steinfletcher/gonum

Example

To define an enum, create a struct with the suffix Enum. You can define a display value in the struct tag. Adding a hyphen will assign the field name to the display value.

You can then generate the enum as follows.

//go:generate gonum -types=ColorEnum,StatusEnum,SushiEnum

// generate an enum with display values. The display values are used for JSON serialization/deserialization
type ColorEnum struct {
	Red       string `enum:"RED"`
	LightBlue string `enum:"LIGHT_BLUE"`
}

// generate an enum with default display values. The display values are set to the field names, e.g. `On` and `Off`
type StatusEnum struct {
	On  string `enum:"-"`
	Off string `enum:"-"`
}

// generate an enum with display values and descriptions.
type SushiEnum struct {
	Maki    string `enum:"MAKI,Rice and filling wrapped in seaweed"`
	Temaki  string `enum:"TEMAKI,Hand rolled into a cone shape"`
	Sashimi string `enum:"SASHIMI,Fish or shellfish served alone without rice"`
}

When a description is defined the json is serialized as follows (not yet implemented)

{
  "sushi": {
    "name": "SASHIMI",
    "description": "Fish or shellfish served alone without rice"
  }
}

Consumer api

The generated code would yield the following consumer api

Create an enum value

a := Red // OR var a Color = Red

Create an enum from a factory method

var name Color = NewColor("RED")

Get the display value

var name string = a.Name() // "RED"

Get all display values

var names []string = ColorNames() // []string{"RED", "BLUE"}

Get all values

var values []Color = ColorValues() // []string{Red, Blue}

Pass as an error

Enums implement Error() string which means they can be passed as errors.

var a error = Red

Developing

go build gonum.go
go generate
go test .

OR

make test
You can’t perform that action at this time.