aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-08 04:13:23 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-01-08 05:13:45 +0100
commit4ffee6bacc3579c57687f4029d2fc73213592c39 (patch)
tree1daf3804dd42d70013a39e6ba62548547726fb38 /src/backends
parentfce7d2b9bf30e09b615dbd77b4dd7db94d623bfb (diff)
downloaddialog-rs-4ffee6bacc3579c57687f4029d2fc73213592c39.tar.gz
dialog-rs-4ffee6bacc3579c57687f4029d2fc73213592c39.tar.bz2
Refactor io::Error into custom Error enum
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/dialog.rs32
-rw-r--r--src/backends/mod.rs2
2 files changed, 9 insertions, 25 deletions
diff --git a/src/backends/dialog.rs b/src/backends/dialog.rs
index fb0f73f..da17ad1 100644
--- a/src/backends/dialog.rs
+++ b/src/backends/dialog.rs
@@ -1,11 +1,9 @@
// Copyright (C) 2019 Robin Krahl <robin.krahl@ireas.org>
// SPDX-License-Identifier: MIT
-use std::io;
-use std::io::Result;
use std::process;
-use crate::{Choice, Input, Message, Question};
+use crate::{Choice, Error, Input, Message, Question, Result};
/// The `dialog` backend.
///
@@ -75,7 +73,7 @@ impl Dialog {
command.arg(&self.width);
command.args(post_args);
- command.output()
+ command.output().map_err(Error::IoError)
}
}
@@ -83,7 +81,7 @@ fn require_success(status: process::ExitStatus) -> Result<()> {
if status.success() {
Ok(())
} else {
- Err(io::Error::new(io::ErrorKind::Other, "dialog failed"))
+ Err(Error::from(("dialog", status)))
}
}
@@ -93,16 +91,10 @@ fn get_choice(status: process::ExitStatus) -> Result<Choice> {
0 => Ok(Choice::Yes),
1 => Ok(Choice::No),
255 => Ok(Choice::Cancel),
- code => Err(io::Error::new(
- io::ErrorKind::Other,
- format!("Could not execute dialog: {}", code),
- )),
+ _ => Err(Error::from(("dialog", status))),
}
} else {
- Err(io::Error::new(
- io::ErrorKind::Other,
- "dialog was terminated by a signal",
- ))
+ Err(Error::from(("dialog", status)))
}
}
@@ -110,25 +102,17 @@ fn get_stderr(output: process::Output) -> Result<Option<String>> {
if output.status.success() {
String::from_utf8(output.stderr)
.map(|s| Some(s))
- .map_err(|_| {
- io::Error::new(io::ErrorKind::Other, "Input contained invalid UTF-8 bytes")
- })
+ .map_err(|err| Error::from(err))
} else {
if let Some(code) = output.status.code() {
match code {
0 => Ok(None),
1 => Ok(None),
255 => Ok(None),
- code => Err(io::Error::new(
- io::ErrorKind::Other,
- format!("Could not execute dialog: {}", code),
- )),
+ _ => Err(Error::from(("dialog", output.status))),
}
} else {
- Err(io::Error::new(
- io::ErrorKind::Other,
- "dialog was terminated by a signal",
- ))
+ Err(Error::from(("dialog", output.status)))
}
}
}
diff --git a/src/backends/mod.rs b/src/backends/mod.rs
index 12a178b..fd0ddcc 100644
--- a/src/backends/mod.rs
+++ b/src/backends/mod.rs
@@ -5,7 +5,7 @@ mod dialog;
pub use crate::backends::dialog::Dialog;
-use std::io::Result;
+use crate::Result;
/// A dialog backend.
///