From 2510f46e32ade9f7c3f6d2546e8a7338f4c27cd7 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 9 Jul 2019 03:14:26 -0400 Subject: use context instead of map_err for futures and streams --- src/eval.rs | 14 +++----------- src/repl.rs | 5 +++-- src/state.rs | 2 +- src/tui.rs | 9 ++++----- 4 files changed, 11 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/eval.rs b/src/eval.rs index 549650d..af3de9e 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -1,4 +1,4 @@ -use futures::stream::Stream as _; +use snafu::futures01::StreamExt as _; use snafu::ResultExt as _; #[derive(Debug, snafu::Snafu)] @@ -56,19 +56,11 @@ impl Eval { dyn futures::stream::Stream + Send, > = if let Ok(s) = builtin_stream { - Box::new(s.map_err(move |e| Error::BuiltinExecution { - cmd: cmd.clone(), - source: e, - })) + Box::new(s.context(BuiltinExecution { cmd })) } else { let process_stream = crate::process::spawn(&cmd, &args); match process_stream { - Ok(s) => { - Box::new(s.map_err(move |e| Error::ProcessExecution { - cmd: cmd.clone(), - source: e, - })) - } + Ok(s) => Box::new(s.context(ProcessExecution { cmd })), Err(e) => { return Err(e).context(Command { cmd }); } diff --git a/src/repl.rs b/src/repl.rs index aa80132..cac6649 100644 --- a/src/repl.rs +++ b/src/repl.rs @@ -1,5 +1,6 @@ use futures::future::{Future as _, IntoFuture as _}; use futures::stream::Stream as _; +use snafu::futures01::{FutureExt as _, StreamExt as _}; use snafu::ResultExt as _; use std::io::Write as _; @@ -53,7 +54,7 @@ fn read() -> impl futures::future::Future { crate::readline::readline("$ ", true) .into_future() .flatten() - .map_err(|e| Error::Read { source: e }) + .context(Read) } fn eval( @@ -63,7 +64,7 @@ fn eval( crate::eval::eval(line) .into_future() .flatten_stream() - .map_err(|e| Error::Eval { source: e }) + .context(Eval) } fn print(event: &crate::eval::CommandEvent) -> Result<()> { diff --git a/src/state.rs b/src/state.rs index 652911c..b9707c0 100644 --- a/src/state.rs +++ b/src/state.rs @@ -136,7 +136,7 @@ impl futures::future::Future for State { .unwrap() .future .poll() - .map_err(|e| Error::Eval { source: e })? + .context(Eval)? { futures::Async::Ready(Some(event)) => match event { crate::eval::CommandEvent::CommandStart( diff --git a/src/tui.rs b/src/tui.rs index 88a169d..b7af752 100644 --- a/src/tui.rs +++ b/src/tui.rs @@ -1,5 +1,6 @@ use futures::future::{Future as _, IntoFuture as _}; use futures::sink::Sink as _; +use snafu::futures01::FutureExt as _; use std::io::Write as _; #[derive(Debug, snafu::Snafu)] @@ -38,10 +39,8 @@ pub fn tui() { .and_then(move |line| { let (res, req) = futures::sync::oneshot::channel(); w.send(crate::state::StateEvent::Line(idx, line, res)) - .map_err(|e| Error::Sending { source: e }) - .and_then(|_| { - req.map_err(|e| Error::Receiving { source: e }) - }) + .context(Sending) + .and_then(|_| req.context(Receiving)) }) .then(move |res| match res { // successful run or empty input means prompt again @@ -72,7 +71,7 @@ fn read() -> impl futures::future::Future { crate::readline::readline("$ ", true) .into_future() .flatten() - .map_err(|e| Error::Read { source: e }) + .context(Read) } fn error(e: &Error) { -- cgit v1.2.3-54-g00ecf