cfg_match!已添加到标准库
#![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实现高性能渲染。
使用示例:
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 等兼容。它提供了紧凑和空格分隔的格式。
使用示例:
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` crateassert_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
From 日报小组 长琴
社区学习交流平台订阅:
- Rustcc 论坛:支持 rss
- 微信公众号:Rust 语言中文社区