前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2019-09-17 - 用于向错误添加上下文并转换为自定义错误类型的简单且符合人体工程学的模板

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

作者头像
MikeLoveRust
发布2019-09-19 17:35:15
8760
发布2019-09-19 17:35:15
举报
Rants:异步NATS客户端库

Rants是一个使用async/ await 语法和新的异步生态系统的异步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

代码语言:javascript
复制
pub(crate) trait ErrWith<T, E> {
    fn err_with<W>(self, with: W) -> Result<T, (E, W)>;
}

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

代码语言:javascript
复制
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以及发生错误的路径:

代码语言:javascript
复制
#[derive(Debug)]
enum Error {
    Io { io_error: io::Error, path: PathBuf },
}

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

代码语言:javascript
复制
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)?为我们的错误补全上下文,并将它们转换为我们的自定义错误类型作为结果:

代码语言:javascript
复制
fn main() -> Result<(), Error> {
    fs::read_to_string("foo/bar").err_with("foo/bar")?;
    Ok(())
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Rants:异步NATS客户端库
  • Rust伦敦社区9月MeetUp
  • Rust / wasm数据 / 内存共享
  • 用于向错误添加上下文并转换为自定义错误类型的简单且符合人体工程学的模板
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档