aboutsummaryrefslogtreecommitdiffstats
path: root/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.rs')
-rw-r--r--src/state.rs38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/state.rs b/src/state.rs
index 45ee36d..0965aea 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -1,5 +1,6 @@
use futures::future::Future as _;
use futures::sink::Sink as _;
+use futures::stream::Stream as _;
use snafu::{OptionExt as _, ResultExt as _};
use std::io::Write as _;
@@ -93,29 +94,28 @@ impl State {
}
}
-impl futures::stream::Stream for State {
+impl futures::future::Future for State {
type Item = ();
type Error = Error;
- fn poll(&mut self) -> futures::Poll<Option<Self::Item>, Self::Error> {
- let event = futures::try_ready!(self
- .r
- .poll()
- .map_err(|_| Error::Unreachable));
- match event {
- Some(StateEvent::Start(idx, cmd, args)) => {
- self.command_start(idx, &cmd, &args)?;
- Ok(futures::Async::Ready(Some(())))
+ fn poll(&mut self) -> futures::Poll<Self::Item, Self::Error> {
+ loop {
+ let event = futures::try_ready!(self
+ .r
+ .poll()
+ .map_err(|_| Error::Unreachable));
+ match event {
+ Some(StateEvent::Start(idx, cmd, args)) => {
+ self.command_start(idx, &cmd, &args)?;
+ }
+ Some(StateEvent::Output(idx, output)) => {
+ self.command_output(idx, &output)?;
+ }
+ Some(StateEvent::Exit(idx, status)) => {
+ self.command_exit(idx, status)?;
+ }
+ None => return Ok(futures::Async::Ready(())),
}
- Some(StateEvent::Output(idx, output)) => {
- self.command_output(idx, &output)?;
- Ok(futures::Async::Ready(Some(())))
- }
- Some(StateEvent::Exit(idx, status)) => {
- self.command_exit(idx, status)?;
- Ok(futures::Async::Ready(Some(())))
- }
- None => Ok(futures::Async::Ready(None)),
}
}
}