10次发布

0.3.4 2023年10月4日
0.3.2 2023年4月1日
0.3.1 2023年3月24日
0.2.2 2022年12月6日
0.2.1 2022年11月27日

#293编码

每月23次下载

Apache-2.0

62KB
1K SLoC

Uuid25:25位不区分大小写的UUID编码

Crates.io License

Uuid25是一种替代性的UUID表示方式,使用不区分大小写的Base36编码将UUID字符串缩短为25位。此库提供了从传统UUID格式到Uuid25以及相反的转换功能。

use uuid25::Uuid25;

// convert from/to string
let a = Uuid25::parse("8da942a4-1fbe-4ca6-852c-95c473229c7d")?;
assert_eq!(a, "8dx554y5rzerz1syhqsvsdw8t");
assert_eq!(a.to_hyphenated(), "8da942a4-1fbe-4ca6-852c-95c473229c7d");

// convert from/to 128-bit byte array
let b = Uuid25::from([0xff; 16]);
assert_eq!(b, "f5lxx1zz5pnorynqglhzmsp33");
assert_eq!(b.to_bytes(), [0xff; 16]);

// convert from/to other popular textual representations
let c = [
    Uuid25::parse("e7a1d63b711744238988afcf12161878")?,
    Uuid25::parse("e7a1d63b-7117-4423-8988-afcf12161878")?,
    Uuid25::parse("{e7a1d63b-7117-4423-8988-afcf12161878}")?,
    Uuid25::parse("urn:uuid:e7a1d63b-7117-4423-8988-afcf12161878")?,
];
assert_eq!(c, ["dpoadk8izg9y4tte7vy1xt94o"; 4]);

let d = Uuid25::parse("dpoadk8izg9y4tte7vy1xt94o")?;
assert_eq!(d.to_hex(), "e7a1d63b711744238988afcf12161878");
assert_eq!(d.to_hyphenated(), "e7a1d63b-7117-4423-8988-afcf12161878");
assert_eq!(d.to_braced(), "{e7a1d63b-7117-4423-8988-afcf12161878}");
assert_eq!(d.to_urn(), "urn:uuid:e7a1d63b-7117-4423-8988-afcf12161878");

// convert from/to uuid crate's Uuid value (enabled by uuid feature)
let uuid_crate = uuid::uuid!("f38a6b1f-576f-4c22-8d4a-5f72613483f6");
let e = Uuid25::from(uuid_crate);
assert_eq!(e, "ef1zh7jc64vprqez41vbwe9km");
assert_eq!(uuid::Uuid::from(e), uuid_crate);

// create value in const context
const K: Uuid25 = Uuid25::parse_unwrap("ae5f2947-0784-48de-af26-690bc03b1f22");
assert_eq!(K, "abmwj0hrnat6qdyswurn714bm");

// generate new UUID in Uuid25 format (enabled by gen feature)
println!("{}", uuid25::gen_v4()); // e.g., "99wfqtl0z0yevxzpl4hv2dm5p"

与其他crate的集成

此crate实现了从/到其他流行crate中UUID类型的转换trait。要启用此类转换trait,请启用相应的crate功能。例如,要启用从/到 uuid::Uuid 的转换,请在 Cargo.toml 中添加以下条目

[dependencies]
uuid   = { version = "<version>", features = ["v4"] }
uuid25 = { version = "<version>", features = ["uuid"] }

然后

use uuid25::Uuid25;

let x: Uuid25 = uuid::Uuid::new_v4().into();
println!("{}", x); // e.g., "6n7pvwv8r54xycmuby0pp1q8a"

let y: uuid::Uuid = x.into();
println!("{}", y); // e.g., "703d4a3e-5f1a-473e-90dd-fe20c883780a"

crate功能

默认功能

  • std 将此crate与 std 集成,并启用与 std::string::Stringstd::error::Error 的集成。请注意,此crate对 std 的依赖性不大,并且此crate的大部分功能在 no_std 环境下仍然可用。

可选功能

  • serde 通过 serde 启用 Uuid25 值的序列化和反序列化
  • uuid 启用从/到 uuid::Uuid 的转换trait
  • bson 启用从/到 bson::Uuid 的转换trait
  • uuid7 启用从/到 uuid7::Uuid 的转换trait
  • gen 启用 gen_v4()gen_v7() 函数,这些函数可以生成Uuid25格式的UUID(由 uuid7 crate 支持;依赖于 stduuid7 功能)

命令行界面

本软件包包含一个简单的过滤器程序,可以将传统的UUID字符串转换为Uuid25以及反向转换。通过以下命令进行安装:

cargo install --example uuid25-filter uuid25

用法

$ cat uuid-strings.txt
1xl7tld67nekvdlrp0pkvsut5
20a6bddafff4faa14e8fc0eb75a169f9
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
{20a6bdda-fff4-faa1-4e8f-c0eb75a169f9}
urn:uuid:20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
$
$ cat uuid-strings.txt | uuid25-filter
1xl7tld67nekvdlrp0pkvsut5
1xl7tld67nekvdlrp0pkvsut5
1xl7tld67nekvdlrp0pkvsut5
1xl7tld67nekvdlrp0pkvsut5
1xl7tld67nekvdlrp0pkvsut5
$
$ cat uuid-strings.txt | uuid25-filter --to hyphenated
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9
20a6bdda-fff4-faa1-4e8f-c0eb75a169f9

许可证

本软件包采用Apache许可证2.0版本。

另请参阅

依赖项

~0–1.4MB
~26K SLoC