Есть tokio::Stream<Item = u8>
и Future<Item = ()>
. Они объединены через select
. Future<Item = ()>
это глобальный таймаут. Он сейчас приходит как Ok(())
. Как его превратить в Err(TimedOut)
чтобы select
прервался?
#[derive(Debug)]
enum Unified {
U8(u8),
Timeout(()),
}
...
let stdout = child.stdout().take().unwrap();
let mut timeout_reader = TimeoutReader::new(stdout, &core.handle());
timeout_reader.set_timeout(Some(Duration::from_secs(20)));
let global_timeout = tokio_core::reactor::Timeout::new(Duration::from_secs(10), &core.handle()).unwrap();
let timeout_stream = global_timeout.into_stream();
let timeout_stream = timeout_stream.map(Unified::Timeout);
...
let read_stream = read_stream.map(Unified::U8);
let joined_stream = read_stream.select(timeout_stream);
let mut iter = joined_stream.wait();