赞
踩
Rants是一个使用async
/ await
语法和新的异步生态系统的异步NATS客户端库。
配置直接处理消息的NATS客户端协议基础设施(与低级解析细节相反)十分的简单。此库的作者曾经用nom
编写过底层解析器并将其集成到一个自定义的 tokio::codec::Decoder
中。新的编解码器提供了一个用于处理来自NATS服务器的所有传入消息的高级流。
更多信息前往GitHub。
Hi Rustaceans,
LDN Meetup将于9月24日在伦敦举行。参与详情请点击:https://www.meetup.com/Rust-London-User-Group/events/264890481/attendees/
Babylon Health为现场提供的比萨和啤酒,期待在那里见到你们。
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语言学习交流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。