我是rust新手,所以,也许有一种我不知道的方法可以做到这一点,但是,如果我把一个reqwest::Body
转换成一个流并调用,例如,try_for_each_concurrent
,流的Error类型是reqwest::Error
,所以,我期望在闭包中返回该类型的东西,但是在reqwest本身之外,构造一个reqwest::Error
是不可能的。
例如:
let mut stream = reqwest::get("http://httpbin.org/ip")
.await?
.bytes_stream();
let result = stream.try_for_each_concurrent(2, |c| async move {
// This cannot work:
let transformed = some_function_that_can_return_another_kind_of_error(c)?;
// And there's no way to convert into a `reqwest::Error`, AFAIK
});
由于类型超出了我的控制范围,我的另一个想法是创建一个流来使用来自reqwest的流,但似乎找不到一个简单的方法来做到这一点。是否有一个正确的/惯用的方法来处理这种情况,我不知道?
谢谢你的帮助!
1条答案
按热度按时间8i9zcol21#
我想我找到了这个问题的解决方案。你需要在调用try_for_each_concurrent之前转换err类型。
因此,如果“another_kind_of_error”实现为YourError类型,则它应该按原样工作。如果没有,则可以使用
所以在这种情况下,你的lambda可以返回底层的reqwest::Error和你自己打包到 Package 器枚举错误YourError中的错误。我已经使用了thiserror::Error来摆脱制作这个 Package 器错误枚举的样板。