Есть 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();