strong_id

github crates.io docs.rs ci status typeid spec status

Strongly typed IDs which optionally satisfy the TypeID specification.

A StrongId is any type which implements StrongId<T: Id>.

The Id trait is implemented for u8, u16, u32, u64, u128, usize and when the "uuid" feature is enabled, Uuid.

TypeID

With default-features = false and the typeid feature enabled, StrongID will follow the TypeID specification.

StrongID is verified against the TypeID spec with the typeid workflow every 6 hours.

Examples

Dynamic StrongIds

ID with a prefix

```rust use strong_id::{prefix, DynamicStrongId};

let userid = DynamicStrongId::::new(prefix!("user"), 3203).unwrap(); println!("{}", userid); // user_0343

let userid = "user0343".parse::>().unwrap(); println!("{:#?}", user_id); // DynamicStrongId { // prefix: Some( // Prefix { // inner: "user", // }, // ), // suffix: 3203, // } ```

ID without a prefix

```rust use strong_id::{prefix, DynamicStrongId};

let id = DynamicStrongId::::new_plain(3203); println!("{}", id); // 0343

let id = "0343".parse::>().unwrap(); println!("{:#?}", id); // DynamicStrongId { // prefix: None, // suffix: 3203, // } ```

TypeId with a prefix

```rust use strong_id::{prefix, DynamicStrongId};

let userid = DynamicStrongId::::nowv7(prefix!("user")).unwrap(); println!("{}", userid); // user01h536gfwffx2rm6pa0xg63337

let userid = "user01h536gfwffx2rm6pa0xg63337" .parse::>() .unwrap(); println!("{:#?}", user_id); // DynamicStrongId { // prefix: Some( // Prefix { // inner: "user", // }, // ), // suffix: 01894668-3f8f-7f45-8a1a-ca0760618c67, // } ```

TypeId without a prefix

```rust use strong_id::{prefix, DynamicStrongId};

let id = DynamicStrongId::::nowv7plain(); println!("{}", id); // 01h536gfwffx2rm6pa0xg63337

let id = "01h536gfwffx2rm6pa0xg63337" .parse::>() .unwrap(); println!("{:#?}", id); // DynamicStrongId { // prefix: None, // suffix: 01894668-3f8f-7f45-8a1a-ca0760618c67, // } ```

Generated StrongIds

ID with a prefix

```rust use strongid::strongid;

strong_id!(pub struct UserId(u16 => "user"));

let userid = UserId::from(3203); println!("{}", userid); // user_0343

let userid = "user0343".parse::().unwrap(); println!("{:#?}", user_id); // UserId { // suffix: 3203, // } ```

ID without a prefix

```rust use strongid::strongid;

strong_id!(pub struct Id(u16));

let id = Id::from(3203); println!("{}", id); // user_0343

let id = "0343".parse::().unwrap(); println!("{:#?}", id); // Id { // suffix: 3203, // } ```

Generated TypeId with a prefix

```rust use strongid::{stronguuid, StrongUuid};

stronguuid!(pub struct UserId(pub Uuid => "user")); // stronguuid!(struct UserId(Uuid => "user")); /* strong_id! { #[derive(StrongUuid)] pub struct UserId(pub Uuid => "user")
} */

let userid = UserId::nowv7(); println!("{}", userid); // user01h536z8abez196j2nzz06y8c8

let userid = "user01h536z8abez196j2nzz06y8c8".parse::().unwrap(); println!("{:#?}", user_id); // UserId { // suffix: 0189466f-a14b-77c2-9348-55ffc06f2188, // } ```

Generated TypeId without a prefix

```rust use strongid::{stronguuid, StrongUuid};

stronguuid!(pub struct Id(pub Uuid)); // stronguuid!(struct Id(Uuid)); /* strong_id! { #[derive(StrongUuid)] pub struct Id(pub Uuid)
} */

let id = Id::now_v7(); println!("{}", id); // 01h5372sq2egxb6ps3taq7p6np

let id = "01h5372sq2egxb6ps3taq7p6np".parse::().unwrap(); println!("{:#?}", id); // UserId { // suffix: 01894671-66e2-743a-b35b-23d2ae7b1ab6, // } ```

Features