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 模式
26,376 个月下载量
用于 266 个 crate (13 个直接使用)
69KB
823 行
std
扩展
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::read
、RwLock::write
和Mutex::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);
-
结果::combine
和Option::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许可证授权。有关详细信息,请参阅 许可证。