♻️ Modify UUID to allow for other versions.

This commit is contained in:
Dan Jones 2025-03-16 12:38:36 -05:00
commit fee2e3cc2f
4 changed files with 55 additions and 24 deletions

View file

@ -14,7 +14,7 @@ func NewConfig(options ...Option) Config {
conf := Config{
extension: ".txt",
separator: "_",
generator: uuidGen,
generator: UUID(nil),
}
for _, opt := range options {
opt(&conf)

View file

@ -8,17 +8,44 @@ import (
"github.com/google/uuid"
)
func uuidGen(*Config) (string, error) {
u, err := uuid.NewRandom()
// UUIDer is an interface for generating UUIDs.
// It is recommended that you use either the UUIDv4 or UUIDv7 variables.
type UUIDer interface {
UUID() (uuid.UUID, error)
}
// UUIDFunc is a function that generates a UUID.
type UUIDFunc func() (uuid.UUID, error)
// UUID allows UUIDFunc to be used as a UUIDer.
func (u UUIDFunc) UUID() (uuid.UUID, error) {
return u()
}
var (
// UUIDv1. You probably don't want to use this. It is included for completeness sake.
UUIDv1 = UUIDFunc(uuid.NewUUID)
// UUIDv4 is the default.
UUIDv4 = UUIDFunc(uuid.NewRandom)
// UUIDv6 is primarily a replacement for UUIDv1. You probably should use 4 or 7.
UUIDv6 = UUIDFunc(uuid.NewV6)
// UUIDv7 should be used if you want it sortable by time.
UUIDv7 = UUIDFunc(uuid.NewV7)
)
// UUID generates a UUID. If nil.is passed as an argument,
// a UUIDv4 is generated.
func UUID(u UUIDer) Generator {
if u == nil {
u = UUIDv4
}
return func(*Config) (string, error) {
uu, err := u.UUID()
if err != nil {
return "", err
}
return u.String(), nil
}
// UUID generates a UUIDv4.
func UUID() Generator {
return uuidGen
return uu.String(), nil
}
}
type randConf struct {

View file

@ -7,30 +7,34 @@ import (
)
func ExampleUUID() {
option := nomino.WithGenerator(nomino.UUID())
gen := nomino.UUID(nil)
str, _ := nomino.Make(nomino.NewConfig(option))
str, _ := gen.Make()
fmt.Println(str)
str, _ = nomino.Make(nomino.NewConfig(option))
str, _ = gen.Make()
fmt.Println(str)
}
func ExampleUUID_v7() {
gen := nomino.UUID(nomino.UUIDv7)
str, _ := gen.Make()
fmt.Println(str)
str, _ = nomino.Make(nomino.NewConfig(option))
str, _ = gen.Make()
fmt.Println(str)
str, _ = gen.Make()
fmt.Println(str)
}
func ExampleRandom() {
option := nomino.WithGenerator(nomino.Random())
str, _ := nomino.Make(nomino.NewConfig(option))
str, _ := nomino.Random().Make()
fmt.Println(str)
}
func ExampleRandomLength() {
option := nomino.WithGenerator(nomino.Random(
nomino.RandomLength(32),
))
str, _ := nomino.Make(nomino.NewConfig(option))
str, _ := nomino.Random(nomino.RandomLength(32)).Make()
fmt.Println(str)
}

View file

@ -9,7 +9,7 @@ import (
)
func TestUUID(t *testing.T) {
st, err := UUID()(nil)
st, err := UUID(nil)(nil)
assert.NoError(t, err)
_, parseErr := uuid.Parse(st)
assert.NoError(t, parseErr)
@ -25,7 +25,7 @@ func TestUUIDFail(t *testing.T) {
uuid.SetRand(badRead{})
defer uuid.SetRand(nil)
_, err := UUID()(nil)
_, err := UUID(nil)(nil)
assert.Equal(t, errors.New("sorry"), err)
}