#uuid #guid #unique

shortguid

简短的URL安全Base64编码的UUID

7 个版本 (重大变更)

0.7.0 2024年5月17日
0.6.0 2023年8月20日
0.5.0 2023年6月24日
0.4.0 2023年6月24日
0.1.0 2023年4月7日

#386 in 数据结构


用于 yeet-yoink

EUPL-1.2

30KB
466

ShortGuid

codecov

简短的URL安全Base64编码的UUID。


ShortGuids 透明地表示UUID类型,但它们的字符串表示中只使用22个字符,而带破折号的UUID有36个字符,不带破折号的UUID有32个字符。

#[test]
fn it_works() {
    let uuid = Uuid::try_parse("c9a646d3-9c61-4cb7-bfcd-ee2522c8f633").unwrap();
    let from_uuid = ShortGuid::from(uuid);
    let parsed_uuid = ShortGuid::try_parse("c9a646d3-9c61-4cb7-bfcd-ee2522c8f633").unwrap();
    let parsed_short = ShortGuid::try_parse("yaZG05xhTLe_ze4lIsj2Mw").unwrap();

    assert_eq!(from_uuid, uuid);
    assert_eq!(from_uuid, "yaZG05xhTLe_ze4lIsj2Mw");
    assert_eq!(from_uuid, "c9a646d3-9c61-4cb7-bfcd-ee2522c8f633");
    assert_eq!(from_uuid, parsed_uuid);
    assert_eq!(from_uuid, parsed_short);

    let random = ShortGuid::new_random();
    assert_ne!(from_uuid, random);
}

模糊测试

这使用 cargo-fuzz。请参阅 fuzz/fuzzers 以获取可用的模糊测试脚本。要运行,使用以下调用之一

cargo +nightly fuzz run roundtrip
cargo +nightly fuzz run decode_random
cargo +nightly fuzz run encode_random
cargo +nightly fuzz run equals

依赖项

~0.4–1.2MB
~20K SLoC