#sha-2 #default #tested #output #unstable #panic #cuid2

cuid2-timeless

一个不稳定、几乎未经测试、可能给出错误输出并且可能随时崩溃的CUID2实现。为学习Rust而构建,我不知道如何测试它。

7次发布

0.1.6 2024年6月8日
0.1.5 2024年6月8日
0.1.4 2024年5月19日

722算法

Download history 211/week @ 2024-05-13 75/week @ 2024-05-20 205/week @ 2024-06-03 34/week @ 2024-06-10 51/week @ 2024-07-01

每月下载 51

自定义许可

20KB
260

cuid2-timeless

一个不稳定、几乎未经测试、可能给出错误输出并且可能随时崩溃的CUID2实现。为学习Rust而构建,我不知道如何测试它。

[!警告] 这个库比cuid-rust慢得多!

基准测试 cuid2-timeless cuid2 (cuid-rust)
单个cuid生成 53.180 µs 2.8162 µs
10,000个cuid生成 553.52 ms 28.900 ms

这个库仅用于学习目的。请勿在生产环境中使用此库!请改用cuid-rust

安装

cargo add cuid2_timeless --features sha3(或者如果你想用sha2,也可以)

使用

要么使用cuid2_timeless::cuid_wrapper()并再次调用它以获取ID,要么通过cuid2_timeless::Cuid获取一些定制

use cuid2_timeless;

let mut cuid = cuid2_timeless::cuid_wrapper();
println!("{}", cuid().unwrap());

或一些定制

use cuid2_timeless;
use rand::{self, Rng};

let mut cuid = cuid2_timeless::Cuid::new(
    Box::new( // A randomizer function
        || {
            rand::thread_rng().gen()
        }
    ),
    Box::new( // Your very own counter function
        |mut i| {
            Box::new(move || {
                i += 1;
                i
            })
        }
    ),
    24, // Length
    Box::new(cuid2_timeless::utils::create_fingerprint) // And a fingerprint creator function (im too lazy to implement)
);
cuid.generate(None).unwrap();

或验证它实际上是否是CUID

use cuid2_timeless;

println!("{}", cuid2_timeless::is_cuid("f9ovgvsnly7h6khwt4nx08kom".to_string(), None, None));

功能

  • regex是用于在模块中添加或删除regex crate的功能。关闭此功能将删除is_cuid函数(默认启用)
  • random是用于在模块中添加或删除rand crate的功能。关闭此功能将删除Default特质从Cuid(默认启用)
  • sha2 是一个功能,用于在模块中添加或删除 sha2 crate。关闭此功能将删除 SHA2 哈希算法,但开启此功能将使用 sha2 进行哈希(如果存在 sha3 则无法启用,如果同时启用了 sha2sha3,则编译会出错,默认不启用)
  • sha3 是一个功能,用于在模块中添加或删除 sha3 crate。关闭此功能将删除 SHA3 哈希算法,但开启此功能将使用 sha3 进行哈希(如果存在 sha2 则无法启用,如果同时启用了 sha2sha3,则编译会出错,默认启用)

依赖项

~4-13MB
~84K SLoC