8 个版本

0.3.3 2024年4月2日
0.3.2 2024年2月8日
0.3.1 2021年7月11日
0.3.0 2021年6月18日
0.1.1 2020年6月28日

#82 in Rust 模式

Download history 8886/week @ 2024-04-22 9618/week @ 2024-04-29 9821/week @ 2024-05-06 9452/week @ 2024-05-13 9405/week @ 2024-05-20 9024/week @ 2024-05-27 8932/week @ 2024-06-03 8612/week @ 2024-06-10 8294/week @ 2024-06-17 9778/week @ 2024-06-24 9636/week @ 2024-07-01 11597/week @ 2024-07-08 6205/week @ 2024-07-15 6351/week @ 2024-07-22 6798/week @ 2024-07-29 6849/week @ 2024-08-05

26,376 个月下载量
用于 266 个 crate (13 个直接使用)

MIT 许可证

69KB
823

std 扩展

状态: CI

项目信息: Docs.rs 最新版本 许可证 Rust 1.53+ 需要

Rust 标准库的附加功能。

描述

此 crate 包含对 Rust 标准库结构的增强,对广大用户有用,但目前尚未在 std 中实现(或稳定)。

该 crate 设计为轻量级(无外部依赖!)并提供可能有一天会进入 std 的基本功能。

发布 0.3 版本支持的最小 Rust 版本是 1.53。但是,如果您需要使用较旧的编译器版本与此 crate 一起使用,请查看发布 0.2;它很可能满足您的需求。

亮点

  • Integer 超特制,实现了所有内置整数,并反映了它们接口的共同部分。

    use stdext::prelude::*;
    
    fn accepts_any_integer<I: Integer>(a: I, b: I) {
      println!("{}", (a + b).count_ones());
    }
    
  • 从浮点数到整数的安全转换。

    use stdext::prelude::FloatConvert;
    
    let valid: Option<u8> = 10.5f32.checked_floor();
    let too_big: Option<u8> = 256f32.checked_floor();
    let nan: Option<u8> = f32::NAN.checked_floor();
    
    assert_eq!(valid, Some(10u8));
    assert_eq!(too_big, None);
    assert_eq!(nan, None);
    
  • Duration 的便捷构建方法

    use std::time::Duration;
    use stdext::prelude::*;
    
    let duration = Duration::from_minutes(1).add_secs(5).add_micros(100);
    assert_eq!(duration, Duration::new(65, 100_000));
    
  • 对于不真正处理锁中毒的同伴,提供了 RwLock::readRwLock::writeMutex::lock 的恐慌版本

    use std::sync::{Arc, RwLock};
    use stdext::prelude::*;
    
    let lock = Arc::new(RwLock::new(1));
    {
        let mut n = lock.force_write(); // Instead of `.write().unwrap()`.
        *n = 2;
    }
    let n = lock.force_read();
    assert_eq!(*n, 2);
    
  • 结果::combineOption::combine 用于压缩对象的成对

    use stdext::prelude::*;
    
    let x = Some(1);
    let y = Some("hi");
    let z = None::<u8>;
    
    assert_eq!(x.combine(y), Some((1, "hi")));
    assert_eq!(x.combine(z), None);
    
    let x = Ok(1);
    let y = Ok("hi");
    let z: Result<i32, &str> = Err("error");
    let z2: Result<i32, &str> = Err("other_error");
    
    assert_eq!(x.combine(y), Ok((1, "hi")));
    assert_eq!(x.combine(z), Err("error"));
    assert_eq!(z.combine(z2), Err("error"));
    
  • 新的便捷宏(主要用于开发目的)

    use stdext::{compile_warning, debug_name, function_name};
    
    fn sample_function() {
      println!("This function is called {}", function_name!());
      println!("You can also found it here:", debug_name!());
    
      compile_warning!("This function must do something else...");
    }
    

...以及其他功能。要查看完整列表,请参阅 crate 文档

动机

标准库很棒,随着时间的推移变得更加强大。然而,从提出一个新功能到使其稳定之间的时间差距太大。

然而,这个crate可以快速更新,并且新功能将在实现后不久即可在稳定版Rust上使用。

贡献

如果您想为这个项目做出贡献,请阅读 贡献指南

许可证

stdext 库根据MIT许可证授权。有关详细信息,请参阅 许可证

无运行时依赖