#extension #core #corelib

no-std r-ex

无冗余的Rust核心库扩展

2个稳定版本

1.0.1 2022年11月7日
1.0.0 2022年11月6日

178无标准库

Download history 189/week @ 2024-04-14 226/week @ 2024-04-21 172/week @ 2024-04-28 292/week @ 2024-05-05 263/week @ 2024-05-12 221/week @ 2024-05-19 225/week @ 2024-05-26 209/week @ 2024-06-02 266/week @ 2024-06-09 223/week @ 2024-06-16 210/week @ 2024-06-23 300/week @ 2024-06-30 245/week @ 2024-07-07 262/week @ 2024-07-14 220/week @ 2024-07-21 216/week @ 2024-07-28

977 每月下载量
用于 2 crates

MIT 许可证

14KB
294

r-ex

Github Crates.io Codacy grade Crates.io

无冗余的Rust核心库扩展,可提高在日常任务中使用Rust类型系统的体验。

亮点

  • 无冗余。 每个扩展都位于其自己的功能标志之后,且没有默认启用的功能。

  • 无风险。 任何可能panic或使用unsafe代码的功能都将 -unsafe 添加到其功能名称中。

  • 无功能依赖。 每个扩展都是独立的,并且与其他所有扩展兼容,因此可以自由混合匹配。

  • 无外部依赖。

  • 无标准库。 此项目仅专注于 核心 库。您想看到一个类似的标准库项目吗? 请告诉我。

  • 仅限稳定Rust。

  • 100% 代码覆盖率。

示例

在数组之间复制

使用r-ex(代码永远不会panic)

let mut buf = [0u8; 4];

buf
    .carved_mut()?          // automatically select range
    .copy_from(&[1, 2]);    // type-safe & size-safe copy never panics
                            // buf = [1, 2, 0, 0]

不使用r-ex(可能panic)

let mut buf = [0u8; 4];

buf
    .get_mut(0..2)?             // explicitly specify range
    .copy_from_slice(&[1, 2]);  // copy_from_slice panics if sizes mismatch
                                // buf = [1, 2, 0, 0]

将大端值写入缓冲区偏移量处

使用 r-ex

fn write_big_endian(dest: &mut [u8], offset: usize, val: u32) {
    dest.carve_mut(offset)? // automatically select range
        .set_be(val);       // supports big-endian and little-endian values; never panics
}

不使用 r-ex

fn write_big_endian(dest: &mut [u8], offset: usize, val: u32) {
    dest.get_mut(offset..offset + core::mem::size_of_val(&val))?    // explicitly specify range
        .copy_from_slice(&val.to_be_bytes())                        // copy_from_slice can panic
}

动机

Rust核心库很棒。它清晰、简洁、无冗余。这是我们喜欢的,我们大家都想保持这种状态。然而,我们经常发现自己编写 utilsmisc 模块,其中包含少量针对核心库的小型通用扩展。有时这些几十行代码是整个项目中最聪明、最强大或最有用的代码。想到这些灵感和创意时刻被埋藏在某个内部模块中,无法公之于众,真是令人沮丧。

这就是r-ex项目发挥作用的地方。它是这些小巧但宝贵的核心库扩展的家园,否则它们将无法引起注意。

贡献指南

欢迎拉取请求。请确保您的贡献符合上面的 原则 部分。

无运行时依赖

功能