【发布时间】:2021-07-04 21:28:31
【问题描述】:
我正在尝试生成由reqwest::blocking::get 函数返回的Result。它返回一个Result<reqwest::blocking::Response, reqwest::Error>,但调用它的函数返回一个Result<reqwest::blocking::Response, Box<dyn std::error::Error>。
- 为什么我的第一次尝试编译失败?
- 进行这种转换最惯用的方法是什么?
这是第一次尝试:
fn get_example_fails() -> Result<Response, Box<dyn Error>> {
let result = blocking::get("http://example.com");
result.map_err(|error| Box::new(error))
}
它有以下错误,我不知道如何修复,但觉得通过一些小的调整它可能会更习惯 - 但不确定要调整什么:
error[E0308]: mismatched types
--> src/bittrex.rs:143:9
|
141 | fn get_example_fails() -> Result<Response, Box<dyn Error>> {
| -------------------------------- expected `Result<reqwes
t::blocking::Response, Box<(dyn StdError + 'static)>>` because of return type
142 | let result = blocking::get("http://example.com");
143 | result.map_err(|error| Box::new(error))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected trait object `dyn StdError`,
found struct `reqwest::Error`
|
= note: expected enum `Result<_, Box<(dyn StdError + 'static)>>`
found enum `Result<_, Box<reqwest::Error>>`
这个尝试编译但看起来很冗长:
fn get_example_works() -> Result<Response, Box<dyn Error>> {
let result = blocking::get("http://example.com");
match result {
Ok(resp) => Ok(resp),
Err(error) => Err(Box::new(error)),
}
}
【问题讨论】:
标签: rust reqwest rust-result