我正在使用future庫,我有一個未來實現Future<T, E>
。我想用一個函數FnOnce(T) -> D
來映射這個未來,其中D: From<E>
。現在,當我希望wait()
爲finsih這個未來,我會得到一個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'ing。 –
@PeterHall好的,我編輯了我的問題。 – torkleyy