Categorygithub.com/eliaperantoni/enumero
repositorypackage
0.3.0
Repository: https://github.com/eliaperantoni/enumero.git
Documentation: pkg.go.dev

# README

Enumero

A little tool to generate namespaced, type-checked and polyglot enums in Go.

Installation

$ go get github.com/eliaperantoni/enumero

Usage

$ enumero --help
Usage of enumero:
  -logrus
        use logrus.Fatal instead of panic
  -marshalJSON
        generate implementation for json.Marshaler
  -marshalText
        generate implementation for encoding.TextMarshaler
  -name string
        name of the enum (default "Enum")
  -output string
        output file path (default "./%s_enumero.go")
  -package string
        name of the generated package (default "enums")
  -source string
        source file to use for values and variants
  -unmarshalJSON
        generate implementation for json.Unmarshaler
  -unmarshalText
        generate implementation for encoding.TextUnmarshaler
  -values string
        values comma separated
  -variant value
        VariantName:Value1,Value2,...,VariantN
$ enumero -package=main -name Color -values=Red,Green,Blue -variant=German:Rot,Grün,Blau
package main

import (
	"fmt"
	"log"
)

func main() {
	var color ColorT
	color = Color.Blue

	fmt.Println(color.String())
	// Ordinal number assigned to enum value, starting from 1
	fmt.Println(color.Ordinal())
	fmt.Println(color.German())

	// Iterate enum values
	for i, color := range Color.Values {
		fmt.Printf("%d: [%d] %s %s\n", i, color.Ordinal(), color.String(), color.German())
	}

	// Returns non-nil error if string doesn't belong to any value
	if color, err := Color.FromString("Green"); err == nil {
		fmt.Println(color.String())
	} else {
		log.Fatal("invalid color")
	}

	// Returns no error, panics on failure
	color = Color.MustFromOrdinal(1)
	fmt.Println(color.German())

	color = Color.MustFromGerman("Blau")
	fmt.Println(color.String())
}

$ go run color_enumero.go test.go 
Blue
3
Blau
0: [1] Red Rot
1: [2] Green Grün
2: [3] Blue Blau
Green
Rot
Blue

Source

For very big enums, a source file can be provided instead of listing all values and variants.

It is expected to look like this:

,German
Red,Rot
Green,Grün
Blue,Blau

That is: the first line is the header and contains an empty string (marking the column of primary values) followed by the names of the variants.

Each following line contains a single value and its corresponding variants.