6 个版本 (3 个破坏性更新)

0.4.0 2024年5月17日
0.3.0 2024年4月3日
0.2.0 2023年7月13日
0.1.3 2023年7月13日

#4 in #type-id

Download history 103/week @ 2024-05-11 109/week @ 2024-05-18 84/week @ 2024-05-25 16/week @ 2024-06-01 43/week @ 2024-06-08 43/week @ 2024-06-15 4/week @ 2024-06-22 52/week @ 2024-06-29 44/week @ 2024-07-06 67/week @ 2024-07-13 38/week @ 2024-07-20 84/week @ 2024-07-27 21/week @ 2024-08-03 57/week @ 2024-08-10

每月202次下载

Apache-2.0 OR MIT

50KB
916 行代码(不含注释)

strong_id

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

强类型 ID,可选地满足 TypeID 规范。

StrongId 是任何实现了 StrongId<T: Id> 的类型。

Id 特性为 u8u16u32u64u128usize 实现,当启用 "uuid" 功能时,还包括 Uuid

TypeID

default-features = false 和启用 typeid 功能的情况下,StrongID 将遵循 TypeID 规范。

StrongID 每6小时使用 typeid 工作流程对 TypeID 规范进行验证。

示例

动态 StrongIds

带前缀的 ID

use strong_id::{prefix, DynamicStrongId};

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

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

不带前缀的 ID

use strong_id::{prefix, DynamicStrongId};

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

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

带前缀的 TypeId

use strong_id::{prefix, DynamicStrongId};

let user_id = DynamicStrongId::<Uuid>::now_v7(prefix!("user")).unwrap();
println!("{}", user_id); // user_01h536gfwffx2rm6pa0xg63337

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

不带前缀的 TypeId

use strong_id::{prefix, DynamicStrongId};

let id = DynamicStrongId::<Uuid>::now_v7_plain();
println!("{}", id); // 01h536gfwffx2rm6pa0xg63337

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

生成的 StrongIds

带前缀的 ID

use strong_id::strong_id;

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

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

let user_id = "user_0343".parse::<UserId>().unwrap();
println!("{:#?}", user_id);
// UserId {
//     suffix: 3203,
// }

不带前缀的 ID

use strong_id::strong_id;

strong_id!(pub struct Id(u16));

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

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

带前缀的生成的 TypeId

use strong_id::{strong_uuid, StrongUuid};

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

let user_id = UserId::now_v7();
println!("{}", user_id); // user_01h536z8abez196j2nzz06y8c8

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

不带前缀的生成的 TypeId

use strong_id::{strong_uuid, StrongUuid};

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

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

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

功能

  • delimited - 启用下划线分隔的前缀。默认启用。
  • serde - 在代码生成中启用 serde 支持。
  • uuid - 启用 uuid 功能。
    • uuid-v1 - 对应 uuid 的 "v1" 功能
    • uuid-v3 - 对应 uuid 的 "v3" 功能
    • uuid-v4 - 对应 uuid 的 "v4" 功能
    • uuid-v5 - 对应 uuid 的 "v5" 功能
    • uuid-v6 - 对应 uuid 的 "v6" 功能
    • uuid-v7 - 对应 uuid 的 "v7" 功能
    • uuid-v8 - 对应 uuid 的 "v8" 功能
  • typeid - 启用满足 TypeId 规范的功能。

依赖

~1.4–2MB
~45K SLoC