Ich benutze die future Bibliothek und ich habe eine Zukunft, die Future<T, E>
implementiert. Ich möchte diese Zukunft mit einer Funktion FnOnce(T) -> D
wo D: From<E>
zuordnen. Jetzt, wenn ich wait()
für diese Zukunft zu Finih will, werde ich eine Result<Result<T, E>, D>
bekommen, aber ich möchte eine Result<T, D>
.Warten auf ein Ergebnis abgebildet Zukunft
Hier einige Beispiel-Code für ein besseres Verständnis:
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),
}
}
Was ist die einfachste und verständliche Art und Weise, dies zu tun (ohne match
ing)?
Es könnte einfacher sein, zu antworten, wenn Sie ein vollständiges Codebeispiel zur Verfügung stellen, mit dem 'match'ing, die Sie vermeiden mögen. –
@PeterHall OK, ich habe meine Frage bearbeitet. – torkleyy