我正在尝试生成函数Result
返回的a reqwest::blocking::get
。它返回 aResult<reqwest::blocking::Response, reqwest::Error>
但调用它的函数返回 a 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)),
}
}