Loading...
Loading...
Generate Go enums following GO modular architechture conventions (string-based enums with validation, constructor, and String method). Use when creating type-safe string enumerations in internal/modules/<module>/enum/ or when user asks to create an enum, add an enum type, or define enum constants.
npx skill4agent add cristiano-pacheco/ai-rules go-create-enuminternal/modules/<module>/enum/<name>_enum.goNew<Type>EnumString()validate<Type>package enum
import "github.com/cristiano-pacheco/pingo/internal/modules/monitor/errs"
const (
ContactTypeEmail = "email"
ContactTypeWebhook = "webhook"
)
var validContactTypes = map[string]struct{}{
ContactTypeEmail: {},
ContactTypeWebhook: {},
}
type ContactTypeEnum struct {
value string
}
func NewContactTypeEnum(value string) (ContactTypeEnum, error) {
if err := validateContactType(value); err != nil {
return ContactTypeEnum{}, err
}
return ContactTypeEnum{value: value}, nil
}
func (e ContactTypeEnum) String() string {
return e.value
}
func validateContactType(contactType string) error {
if _, ok := validContactTypes[contactType]; !ok {
return errs.ErrInvalidContactType
}
return nil
}internal/modules/<module>/errs/errs.goErrInvalid<EnumName> = errors.New("invalid <enum_name>")ErrInvalidContactType = errors.New("invalid contact type")<snake_case_enum_name>_enum.goenum<snake_case>_enum.gocontact_type_enum.go<EnumName><Value>ContactTypeEmailvalid<EnumName>s<EnumName>EnumContactTypeEnumNew<EnumName>Enumvalidate<EnumName>ErrInvalid<EnumName>errsErrInvalid<EnumName>internal/modules/<module>/errs/errors.gointernal/modules/<module>/enum/<name>_enum.govalue stringNew<EnumName>Enum(value string) (<EnumName>Enum, error)String() stringvalidate<EnumName>(value string) error// Create typed enum (validation is automatic)
contactType, err := enum.NewContactTypeEnum(input)
if err != nil {
return err
}
fmt.Println(contactType.String()) // "email"
// Use constants directly when value is known at compile time
const defaultType = enum.ContactTypeEmail