typed-uuid ![Latest Version] ![Docs]

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: ```rust // Subtype the Id type to specify the version of the Id, instead // of repeating yourself everywhere. type Id = typed_uuid::Id;

struct Relation { user: Id, role: Id, } `` Ids with differentT` 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. ```rust let user = Id::::new(); let role = Id::::new();

// Compilation fails here, can't compare Id and Id assert_eq!(user, role); ```

But Ids of the same type work: ```rust let mut first = Id::::new(); let second = Id::::new();

first = second; assert_eq!(first, second); ```

Usage

When depending on this library, you should probably choose to disable all default features, since all Uuid versions up to and including v5 are enabled by default, but you probably only want to use one type: toml [dependencies.typed-uuid] version = "*" default-features = false features = ["v4", "serde"]