3个版本
0.1.2 | 2021年1月11日 |
---|---|
0.1.1 | 2021年1月11日 |
0.1.0 | 2021年1月10日 |
#462 in 调试
14,998每月下载量
用于 32 个crate (4个直接使用)
7KB
serde-error
serde-error
提供一个可(反)序列化的 Error
类型,实现了 std::error::Error
,可以轻松用于通过网络传输错误。
我应该使用这个吗?
这个crate是生产级别的。然而,你可能不想使用它:通常,将错误作为某种类型汇总,而不是序列化整个因果关系链,更有意义。
这个crate被设计用于在Rust WebAssembly blob中运行Rust wasmtime-host。在这种情况下,因果关系链在序列化边界上被清晰地保留,因此保留所有内容是有意义的。
在其他一些情况下,可能有必要序列化整个因果关系链,但通常最合理的是不要序列化错误。
因此,请节俭地使用 serde-error
。
如何使用这个?
use anyhow::Context;
use std::error::Error;
fn foo() -> anyhow::Result<()> {
// ...
Err(anyhow::anyhow!("Failed smurfing the smurfs"))
}
fn bar() -> anyhow::Result<()> {
// ...
foo().context("Running foo")
}
fn main() {
if let Err(returned_err) = bar() {
let s = bincode::serialize(&serde_error::Error::new(&*returned_err))
.expect("Serializing error");
let d: serde_error::Error = bincode::deserialize(&s)
.expect("Deserializing error");
let e = anyhow::Error::from(d);
assert_eq!(e.to_string(), "Running foo");
assert_eq!(e.source().unwrap().to_string(), "Failed smurfing the smurfs");
} else {
panic!("bar did not return an error");
}
}
依赖项
~0.4–1MB
~24K SLoC