|
|
|
@ -667,7 +667,25 @@ fn render() -> Result<String> {
|
|
|
|
|
|
|
|
|
|
> 如果你想要设计自己的错误类型,同时给调用者提供具体的信息时,就使用 `thiserror`,例如当你在开发一个三方库代码时。如果你只想要简单,就使用 `anyhow`,例如在自己的应用服务中。
|
|
|
|
|
|
|
|
|
|
本章的篇幅已经过长,因此就不具体介绍 `anyhow` 该如何使用,官方提供的例子已经足够详尽,这里就留给大家自己探索了 :)
|
|
|
|
|
```rust
|
|
|
|
|
use std::fs::read_to_string;
|
|
|
|
|
|
|
|
|
|
use anyhow::Result;
|
|
|
|
|
|
|
|
|
|
fn main() -> Result<()> {
|
|
|
|
|
let html = render()?;
|
|
|
|
|
println!("{}", html);
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn render() -> Result<String> {
|
|
|
|
|
let file = std::env::var("MARKDOWN")?;
|
|
|
|
|
let source = read_to_string(file)?;
|
|
|
|
|
Ok(source)
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
关于如何选用 `thiserror` 和 `anyhow` 只需要遵循一个原则即可:**是否关注自定义错误消息**,关注则使用 `thiserror`(常见业务代码),否则使用 `anyhow`(编写第三方库代码)。
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|