Ваша проблема сводится к:
use futures::*;
struct Foo {}
impl Future for Foo {
type Item = u32;
type Error = u32;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
Ok(Async::Ready(100))
}
}
fn main() {
let f = Foo {};
let _result = f
.and_then(|val| {
(val * 2, val * 4)
});
}
Это дает:
|
18 | .and_then(|val| {
| ^^^^^^^^ the trait `futures::future::IntoFuture` is not implemented for `(u32, u32)`
Кстати, IntoFuture
реализовано для Result
:
impl<T, E> IntoFuture for Result<T, E>
А для кортежа :
impl<A, B> IntoFuture for (A, B)
where
A: IntoFuture,
B: IntoFuture<Error = A::Error>,
И выдача кортежа Результатов работает:
use futures::*;
struct Foo {}
impl Future for Foo {
type Item = u32;
type Error = u32;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
Ok(Async::Ready(100))
}
}
fn main() {
let f = Foo {};
let _result = f
.and_then(|val| {
(Ok(val * 2), Ok(val * 4))
});
}
детская площадка с вашим примером: он работает, но он достаточно запутан, чтобы получить результаты.Смотрите также комментарии ниже.