cfg_match!已添加到标准库
代码语言:javascript复制#![feature(cfg_match)]
cfg_match! {
cfg(unix) => {
fn foo() { /* unix specific functionality */ }
}
cfg(target_pointer_width = "32") => {
fn foo() { /* non-unix, 32-bit functionality */ }
}
_ => {
fn foo() { /* fallback implementation */ }
}
}
GitHub: https://github.com/rust-lang/rust/pull/115416
viewbuilder跨平台UI框架
该 crate 为 UI 后端提供了一种类似于 HTML 的渲染 API。它专为作为 concoct 的后端而构建,但也可以使用它作为后端来引入自己的状态管理工具,或者构建自己的框架。
特性如下:
- 跨平台,支持桌面和移动设备。
- 具备类似于HTML的事件处理API。
- 使用taffy实现的CSS弹性盒子和网格布局。
- 通过accesskit实现辅助功能支持。
- 使用rust-skia实现高性能渲染。
使用示例:
代码语言:javascript复制let mut tree = Tree::default();
let root = Element::new()
.align_items(AlignItems::Center)
.justify_content(JustifyContent::Center)
.child(tree.insert("Hello World!"))
.build(&mut tree);
viewbuilder::run(tree, root)
GitHub: https://github.com/concoct-rs/viewbuilder
fancy-duration v0.6.0发布
fancy-duration 实现了类似于 Go 语言的 time.ParseDuration 的方案,生成了一个适用于可以使用秒和纳秒的任何类型的通用持续时间。它默认支持 serde、time 和 chrono crate,并提供了你可以实现的特性,以使你自己的持续时间与它兼容,从而也与 serde 等兼容。它提供了紧凑和空格分隔的格式。
使用示例:
代码语言:javascript复制use std::time::Duration;
use fancy_duration::FancyDuration;
pub fn main() {
assert_eq!(FancyDuration(Duration::new(20, 0)).to_string(), "20s");
assert_eq!(FancyDuration(Duration::new(600, 0)).to_string(), "10m");
assert_eq!(FancyDuration(Duration::new(120, 0)).to_string(), "2m");
assert_eq!(FancyDuration(Duration::new(185, 0)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<Duration>::parse("3m 5s").unwrap().duration(), Duration::new(185, 0));
assert_eq!(FancyDuration(Duration::new(185, 0)).to_string(), "3m 5s");
#[cfg(feature = "time")]
{
// also works with time::Duration from the `time` crate
assert_eq!(FancyDuration(time::Duration::new(20, 0)).to_string(), "20s");
assert_eq!(FancyDuration(time::Duration::new(600, 0)).to_string(), "10m");
assert_eq!(FancyDuration(time::Duration::new(120, 0)).to_string(), "2m");
assert_eq!(FancyDuration(time::Duration::new(185, 0)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<time::Duration>::parse("3m 5s").unwrap().duration(), time::Duration::new(185, 0));
assert_eq!(FancyDuration(time::Duration::new(185, 0)).to_string(), "3m 5s");
}
#[cfg(feature = "chrono")]
{
// also works with chrono!
assert_eq!(FancyDuration(chrono::Duration::seconds(20)).to_string(), "20s");
assert_eq!(FancyDuration(chrono::Duration::seconds(600)).to_string(), "10m");
assert_eq!(FancyDuration(chrono::Duration::seconds(120)).to_string(), "2m");
assert_eq!(FancyDuration(chrono::Duration::seconds(185)).to_string(), "3m 5s");
assert_eq!(FancyDuration::<chrono::Duration>::parse("3m 5s").unwrap().duration(), chrono::Duration::seconds(185));
assert_eq!(FancyDuration(chrono::Duration::seconds(185)).to_string(), "3m 5s");
}
}
GitHub: https://github.com/erikh/fancy-duration