我正在使用futures库,并且我有一个实现了
以下是更好理解的示例代码:
Future<T, E>
的future。我想使用函数FnOnce(T) -> D
将这个future映射为另一个future,其中D: From<E>
。当我想要wait()
等待此future完成时,会返回Result<Result<T, E>, D>
,但我希望得到一个Result<T, D>
。以下是更好理解的示例代码:
struct ReadError;
enum DownloadError {
Read(ReadError),
Parse(ParseError),
}
impl From<ReadError> for DownloadError { ... }
fn parse(bytes: [u8; 4]) -> Result<i32, DownloadError> { ... }
fn map_and_wait<F: Future<Item = [u8; 4]; Error = ReadError>>(f: F) -> Result<i32, DownloadError> {
match f.map(|x| parse(x)).wait() {
Ok(Ok(x)) => Ok(x),
Ok(Err(x)) => Err(x.into()),
Err(x) => Err(x),
}
}
如果不使用匹配(match)的方法,最简单、易于理解的方式是什么?
match
,那么回答可能会更容易。 - Peter Hall