< 返回版块

Mike Tang 发表于 2024-09-01 03:14

ratatui-wgpu - 在web上渲染出终端界面

非常酷。

https://github.com/Jesterhearts/ratatui-wgpu

backon - 让重试成为内置行为

这是一个神奇的库。

异步版

use anyhow::Result;
use backon::ExponentialBuilder;
use backon::Retryable;

async fn fetch() -> Result<String> {
    Ok("hello, world!".to_string())
}

#[tokio::main]
async fn main() -> Result<()> {
    let content = fetch
        // Retry with exponential backoff
        .retry(ExponentialBuilder::default())
        // Sleep implementation, required if no feature has been enabled
        .sleep(tokio::time::sleep)
        // When to retry
        .when(|e| e.to_string() == "EOF")
        // Notify when retrying
        .notify(|err: &anyhow::Error, dur: Duration| {
            println!("retrying {:?} after {:?}", err, dur);
        })
        .await?;
    println!("fetch succeeded: {}", content);

    Ok(())
}

同步版

use anyhow::Result;
use backon::BlockingRetryable;
use backon::ExponentialBuilder;

fn fetch() -> Result<String> {
    Ok("hello, world!".to_string())
}

fn main() -> Result<()> {
    let content = fetch
        // Retry with exponential backoff
        .retry(ExponentialBuilder::default())
        // When to retry
        .when(|e| e.to_string() == "EOF")
        // Notify when retrying
        .notify(|err: &anyhow::Error, dur: Duration| {
            println!("retrying {:?} after {:?}", err, dur);
        })
        .call()?;
    println!("fetch succeeded: {}", content);

    Ok(())
}

https://github.com/Xuanwo/backon

匿名 impls

这篇文章介绍了一个关于Rust语言的新特性提议——匿名实现(anonymous impls)。该特性允许在函数内部直接实现和返回一个符合某个trait的匿名类型,而无需显式定义结构体。这可以简化代码,减少冗余,特别是在处理迭代器等场景中。文章还探讨了未来可能的扩展,如同时实现多个trait的能力,以及如何与其他Rust未来特性(如生成器)结合使用。

https://theincredibleholk.org/blog/2024/08/26/anonymous-impls/

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论
asuper 2024-09-02 15:35

backon 这个很有意思啊,看了示例就大概能知道是怎么实现的。

不过看了代码发现好复杂,早期版本还是比较容易看的,现在的版本多支持了几个功能,那个泛型膨胀的很厉害

1 共 1 条评论, 1 页