【Rust 日报】2023-09-24 cfg_match!已添加到标准库

2023-09-26 20:02:04 浏览数 (2)

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

0 人点赞