diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-07-06 13:13:01 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-07-06 13:13:01 -0400 |
commit | b341da5771c0bb607caf917b1293153b38a5bf9c (patch) | |
tree | 2e33a6026d953bd179316bb48a9298e2f3ab9373 /src/builtins.rs | |
parent | d804b219ee68e9f72b4dc5a1e3678a3e98d9de06 (diff) | |
download | nbsh-old-b341da5771c0bb607caf917b1293153b38a5bf9c.tar.gz nbsh-old-b341da5771c0bb607caf917b1293153b38a5bf9c.zip |
have eval streams also emit start events
Diffstat (limited to 'src/builtins.rs')
-rw-r--r-- | src/builtins.rs | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/builtins.rs b/src/builtins.rs index d130907..2393e89 100644 --- a/src/builtins.rs +++ b/src/builtins.rs @@ -41,6 +41,7 @@ pub fn exec(cmd: &str, args: &[String]) -> Result<Builtin> { pub struct Builtin { cmd: String, args: Vec<String>, + started: bool, done: bool, } @@ -50,6 +51,7 @@ impl Builtin { "cd" => Ok(Self { cmd: cmd.to_string(), args: args.to_vec(), + started: false, done: false, }), _ => Err(Error::UnknownBuiltin { @@ -65,22 +67,30 @@ impl futures::stream::Stream for Builtin { type Error = Error; fn poll(&mut self) -> futures::Poll<Option<Self::Item>, Self::Error> { - if self.done { - return Ok(futures::Async::Ready(None)); + if !self.started { + self.started = true; + Ok(futures::Async::Ready(Some( + crate::eval::CommandEvent::CommandStart( + self.cmd.clone(), + self.args.clone(), + ), + ))) + } else if !self.done { + self.done = true; + let res = match self.cmd.as_ref() { + "cd" => cd(&self.args), + _ => Err(Error::UnknownBuiltin { + cmd: self.cmd.clone(), + }), + }; + res.map(|_| { + futures::Async::Ready(Some( + crate::eval::CommandEvent::BuiltinExit, + )) + }) + } else { + Ok(futures::Async::Ready(None)) } - - self.done = true; - let res = match self.cmd.as_ref() { - "cd" => cd(&self.args), - _ => Err(Error::UnknownBuiltin { - cmd: self.cmd.clone(), - }), - }; - res.map(|_| { - futures::Async::Ready(Some( - crate::eval::CommandEvent::BuiltinExit, - )) - }) } } |