Я использую ящик futures = "0.1.21"
и пытаюсь написать функцию, которая возвращает объект признака, который является "Future
из Stream
из bool
s".В настоящей программе я устанавливаю соединение с сервером, который периодически передает статус своих операций.
Фьючерсы
Я смог вернуть "Future
изbool
"объект черты примерно так:
extern crate futures;
use futures::{future, Future};
fn future() -> Box<Future<Item = bool, Error = std::io::Error>> {
Box::new(future::ok(true))
}
fn main() { future(); }
Теперь я хотел бы вернуть" Future
из Stream
из bool
s ", но если я попытаюсь:
extern crate futures;
use futures::{future, stream, Future, Stream};
fn stream_future() -> Box<Future<Item = Stream<Item = bool, Error = std::io::Error>, Error = std::io::Error>> {
Box::new(future::ok(stream::empty::<bool, std::io::Error>()))
}
fn main() { stream_future(); }
Не удается скомпилировать с:
error[E0271]: type mismatch resolving `<futures::FutureResult<futures::stream::Empty<bool, std::io::Error>, std::io::Error> as futures::Future>::Item == futures::Stream<Item=bool, Error=std::io::Error>`
--> src/main.rs:5:5
|
5 | Box::new(future::ok(stream::empty::<bool, std::io::Error>()))
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `futures::stream::Empty`, found trait futures::Stream
|
= note: expected type `futures::stream::Empty<bool, std::io::Error>`
found type `futures::Stream<Item=bool, Error=std::io::Error>`
= note: required for the cast to the object type `futures::Future<Item=futures::Stream<Item=bool, Error=std::io::Error>, Error=std::io::Error>`
Итераторами
Я сталкиваюсь с подобной проблемой, если пытаюсь вернуть вложенный Iterator
, например:
fn iter2() -> Box<Iterator<Item = Iterator<Item = bool>>> {
Box::new(vec![vec![true].into_iter()].into_iter())
}
Сбой:
error[E0271]: type mismatch resolving `<std::vec::IntoIter<std::vec::IntoIter<bool>> as std::iter::Iterator>::Item == std::iter::Iterator<Item=bool>`
--> src/main.rs:2:5
|
2 | Box::new(vec![vec![true].into_iter()].into_iter())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `std::vec::IntoIter`, found trait std::iter::Iterator
|
= note: expected type `std::vec::IntoIter<bool>`
found type `std::iter::Iterator<Item=bool>`
= note: required for the cast to the object type `std::iter::Iterator<Item=std::iter::Iterator<Item=bool>>`
Другие варианты?
Я подозреваю, что либо невозможно «вложить» такие черты, либо я не смогчтобы понять синтаксис.
Если это невозможно, есть ли другой дизайн / шаблон, на который я должен обратить внимание, чтобы выполнить что-то подобное?