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>,
}

Ids 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 Ids 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

Enums

Errors which might occur when using Id.