code: func newEnumField(f interface{}, e enum) enumField {
  	var val string
  
  	// field name = enum name + field name
  	name := fmt.Sprintf("%v%v", e.Name, f)
  
  	// first, any characters that don't match any valid variable character are replaced with '_'
  	alwaysInvalid := regexp.MustCompile("[^a-zA-Z0-9_]")
  	validName := alwaysInvalid.ReplaceAllLiteralString(name, "_")
  
  	switch v := f.(type) {
  	case string:
  		val = fmt.Sprintf(`"%v"`, v)
  	case int:
  		val = fmt.Sprintf("%v", v)
  	}
  	return enumField{
  		Name:  validName,
  		Value: val,
  		Type:  e.Name,
  	}
  }
docs: // creates new enum field
  // f : enum's member
  // e : the enum representation