A Go tool to auto generate methods for your enums
Go to file
marco 5ecab372f9 renamed method 2016-02-06 22:27:43 +01:00
testdata Added a method to the generated code to get the enum value from the string name. Fixed all tests. 2015-12-29 13:14:54 +00:00
README.md removed unnecessary params in function call 2016-01-13 11:50:18 +01:00
endtoend_test.go Uncommented commented code by error 2015-12-29 13:48:01 +00:00
enumer.go Move code out of the inner for loop as it only depend on the outer one 2015-12-31 14:03:36 +00:00
golden_test.go Added a method to the generated code to get the enum value from the string name. Fixed all tests. 2015-12-29 13:14:54 +00:00
sql.go renamed method 2016-02-06 22:27:43 +01:00
stringer.go renamed method 2016-02-06 22:27:43 +01:00
util_test.go Added a method to the generated code to get the enum value from the string name. Fixed all tests. 2015-12-29 13:14:54 +00:00

README.md

Enumer

Enumer generates Go code to get string names from enum values and viceversa. It is a fork of Rob Pikes Stringer tool but adding a "string to enum value" method to the generated code.

This is useful when you need to read enum values from the command line arguments, from a configuration file, from a REST API request... In short, from those places where using the real enum value (an integer) would be almost meaningless or hard to trace or use by a human

For example, if we have an enum type called Pill,

type Pill int

const (
	Placebo Pill = iota
	Aspirin
	Ibuprofen
	Paracetamol
	Acetaminophen = Paracetamol
)

executing enumer -type=Pill will generate a new file with two methods:

func (i Pill) String() string {
    //...
}

func PillString(s string) (Pill, error) {
    //...
}

From now on, we can:

// Convert any Pill value to string
var aspirinString string = Aspirin.String()
// (or use it in any place where a Stringer is accepted)
fmt.Println("I need ", Paracetamol) // Will print "I need Paracetamol"

// Convert a string with the enum name to the corresponding enum value
pill, err := PillString("Ibuprofen")
if err != nil {
    fmt.Println("Unrecognized pill: ", err)
    return
}
// Now pill == Ibuprofen

The generated code is exactly the same as the Stringer tool plus the <Type>String method, so you can use Enumer where you are already using Stringer without any code change.

How to use

The usage of Enumer is the same as Stringer, no changes were introduced. For more information please refer to the Stringer docs

Additional functions of this fork

This fork additionally implements the Scanner and Valuer interface to use a enum seamlessly in a database model.

TODO

  • Add a flag to optionally generate implementation of Scanner und Valuer interface