package id import ( "regexp" "strings" "git.perx.ru/perxis/perxis-go/pkg/errors" "github.com/rs/xid" ) const ( MaxLengthID = 64 MaxLengthName = 256 ) var ( ErrEmptyID = errors.New("empty ID") ErrNotValidID = errors.New("id contains invalid characters") ErrLongID = errors.New("id too long (max 64 symbols)") ErrEmptyName = errors.New("empty name") ErrLongName = errors.New("name too long (max 256 symbols)") isValidID = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9-_]*$`).MatchString ) func GenerateNewID() string { return xid.New().String() } func ValidateID(id string) error { if strings.TrimSpace(id) == "" { return ErrEmptyID } if len(id) > MaxLengthID { return ErrLongID } if !isValidID(id) { return errors.WithDetail(ErrNotValidID, "must begin with latin letters and contain latin letters, numbers or '-', '_'") } return nil } func ValidateName(name string) error { if strings.TrimSpace(name) == "" { return ErrEmptyName } if len(name) > MaxLengthName { return ErrLongName } return nil }