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 {
fn err_with(self, with: W) -> Result;
}
并实例化一个Result
,用Err
有效负载的元组和附加值替换有效负载:
impl ErrWith for Result {
fn err_with(self, with: W) -> Result {
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
转化为 Error::Io
:
impl> 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语言学习交流