【Rust日报】2019-09-17 - 用于向错误添加上下文并转换为自定义错误类型的简单且符合人体工程学的模板...

Rants:异步NATS客户端库

Rants是一个使用asyncawait 语法和新的异步生态系统的异步NATS客户端库。

配置直接处理消息的NATS客户端协议基础设施(与低级解析细节相反)十分的简单。此库的作者曾经用nom编写过底层解析器并将其集成到一个自定义的 tokio::codec::Decoder中。新的编解码器提供了一个用于处理来自NATS服务器的所有传入消息的高级流。

更多信息前往GitHub。

Rust伦敦社区9月MeetUp

Hi Rustaceans,

LDN Meetup将于9月24日在伦敦举行。参与详情请点击:https://www.meetup.com/Rust-London-User-Group/events/264890481/attendees/

Babylon Health为现场提供的比萨和啤酒,期待在那里见到你们。

Rust / wasm数据 / 内存共享

wasm-bindgen是一个Rust库和CLI工具,它促进了wasm模块和JavaScript之间的高级交互。wasm-bindgen 工具和库都是Rust和WebAssembly生态系统的一部分。

wasm-bindgen工具有点半填充性质,用于主机绑定等功能,以及用于增强JS和wasm编译代码(目前主要来自Rust)之间高级交互的部分功能。更具体地说,这个项目能让JS / wasm与字符串、JS对象、类等事物之间进行通信,而不是纯粹的传递整数和浮点数。

点击这里了解更多。

用于向错误添加上下文并转换为自定义错误类型的简单且符合人体工程学的模板

经过一系列实验,这已经是一个很好的模板,下面我们就开始用它来补全自定义错误类型的上下文。

首先,我们使用单个方法定义特征, err_with

pub(crate) trait ErrWith<T, E> {
    fn err_with<W>(self, with: W) -> Result<T, (E, W)>;
}

并实例化一个Result,用Err有效负载的元组和附加值替换有效负载:

impl<T, E> ErrWith<T, E> for Result<T, E> {
    fn err_with<W>(self, with: W) -> Result<T, (E, W)> {
        match self {
            Ok(ok) => Ok(ok),
            Err(error) => Err((error, with)),
        }
    }
}

然后,我们可以使用From实现我们的自定义错误类型,不同的元组类型映射到不同的错误变体。这是一个自定义错误类型,其中包含一个Io变量,io::Error以及发生错误的路径:

#[derive(Debug)]
enum Error {
    Io { io_error: io::Error, path: PathBuf },
}

From impl 将(io::Error, impl AsRef<Path>)转化为 Error::Io:

impl<P: AsRef<Path>> From<(io::Error, P)> for Error {
    fn from((io_error, path): (io::Error, P)) -> Error {
        Error::Io {
            path: path.as_ref().to_owned(),
            io_error,
        }
    }
}

我们可以用来.err_with(path)?为我们的错误补全上下文,并将它们转换为我们的自定义错误类型作为结果:

fn main() -> Result<(), Error> {
    fs::read_to_string("foo/bar").err_with("foo/bar")?;
    Ok(())
}

playground上的代码链接。

在GitHub上了解更多。


From 日报小组 @Lance

日报订阅地址:

独立日报订阅地址:

  • Telgram Channel

  • 阿里云语雀订阅

  • Steemit

  • GitHub

社区学习交流平台订阅:

  • Rust.cc论坛: 支持rss

  • Rust Force: 支持rss

  • 微信公众号:Rust语言学习交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值