You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
707 B
45 lines
707 B
package value_objects |
|
|
|
import ( |
|
"errors" |
|
|
|
"github.com/google/uuid" |
|
) |
|
|
|
var ( |
|
ErrInvalidUUID = errors.New("invalid UUID format") |
|
) |
|
|
|
type BaseUUID struct { |
|
value string |
|
} |
|
|
|
func NewBaseUUID(value string) (BaseUUID, error) { |
|
if value == "" { |
|
return BaseUUID{}, ErrInvalidUUID |
|
} |
|
|
|
_, err := uuid.Parse(value) |
|
if err != nil { |
|
return BaseUUID{}, ErrInvalidUUID |
|
} |
|
|
|
return BaseUUID{value: value}, nil |
|
} |
|
|
|
func NewRandomBaseUUID() (BaseUUID, error) { |
|
id, err := uuid.NewRandom() |
|
if err != nil { |
|
return BaseUUID{}, err |
|
} |
|
|
|
return BaseUUID{value: id.String()}, nil |
|
} |
|
|
|
func (b BaseUUID) String() string { |
|
return b.value |
|
} |
|
|
|
func (b BaseUUID) Equals(other BaseUUID) bool { |
|
return b.value == other.value |
|
} |