Crate typed_uuid
source ·Expand description
Id
is a typed wrapper around a uuid::Uuid
.
Use it to add type safety and prevent confusion between different kinds of Uuid.
Example
Represent different types of Id to prevent mixups or invalid states. If describing
a unique resource’s relationship to another, for example the Role
a User
has,
the relationship can be expressed as follows:
// Subtype the Id type to specify the version of the Id, instead
// of repeating yourself everywhere.
type Id<T> = typed_uuid::Id<T, typed_uuid::V4>;
struct Relation {
user: Id<User>,
role: Id<Role>,
}
Id
s with different T
parameter types are incompatible, and cannot be compared.
Attempting to assign an Id<User>
to a variable of type Id<Role>
is a compilation error.
ⓘ
let user = Id::<User>::new();
let role = Id::<Role>::new();
// Compilation fails here, can't compare Id<User> and Id<Role>
assert_eq!(user, role);
But Id
s of the same type work:
let mut first = Id::<User>::new();
let second = Id::<User>::new();
assert_ne!(first, second);
first = second;
assert_eq!(first, second);
Usage
When depending on this library, you need to explicitly select the versions of the uuid, you will be using, as well as optionally serde
support:
[dependencies.typed-uuid]
version = "*"
default-features = false
features = ["v4", "serde"]
Re-exports
pub use uuid;
Structs
Typed wrapper around a
Uuid
, supports same versions of Uuid as the uuid
crate trough the Version
parameter.Denotes that the contained Uuid is of type V1
Denotes that the contained Uuid is of type V3
Denotes that the contained Uuid is of type V4
Denotes that the contained Uuid is of type V5