Summary
Suggest adding a couple helper functions.
IsZero
IsZero() allows uuid to support the Nullable interface and interface better with existing code. It can be as simple as:
func (u UUID) IsZero() bool {
return u == Nil
}
This is particularly important when interfacing UUID with the existing ORM libraries. Heck, IsZero() is even used by the reflect package too!
ToNullUUID
Another helper function that is used by this null package (and is quite convenient) are to-null values from the original primitives. So in the case of uuid.UUID and uuuid.NullUUID, adding the following helper function.
func ToNullUUID[T uuid.UUID | uuid.NullUUID](id T) uuid.NullUUID {
if v, ok := any(id).(uuid.UUID); ok {
if v == uuid.Nil {
return uuid.NullUUID{}
}
return uuid.NullUUID{v, true}
} else if v, ok := any(id).(uuid.NullUUID); ok {
return v
} else {
panic("this should not happen")
}
}
That way we don't have to write the following code:
id := uuid.New()
// If you know that id is not nil
nullVal := uuid.NullUUID{id, true}
// if you don't know whether or not id is nil.
nullVal := uuid.NullUUID{id, id == uuid.Nil}
// And if you want to use named struct fields
nullVal := uuid.NullUUID{UUID: id, Valid: id == uuid.Nil}
// What it looks like with the helper function
nullVal := uuid.ToNullUUID(id)
This is particularly useful when combined with existing libraries such as ORMs. Casting to uuid.NullUUID is common.
Summary
Suggest adding a couple helper functions.
IsZeroIsZero()allows uuid to support theNullableinterface and interface better with existing code. It can be as simple as:This is particularly important when interfacing UUID with the existing ORM libraries. Heck,
IsZero()is even used by the reflect package too!ToNullUUIDAnother helper function that is used by this null package (and is quite convenient) are to-null values from the original primitives. So in the case of
uuid.UUIDanduuuid.NullUUID, adding the following helper function.That way we don't have to write the following code:
This is particularly useful when combined with existing libraries such as ORMs. Casting to
uuid.NullUUIDis common.