diff options
author | Daniel Mueller <deso@posteo.net> | 2020-08-28 18:44:45 -0700 |
---|---|---|
committer | Daniel Mueller <deso@posteo.net> | 2020-08-28 18:44:45 -0700 |
commit | b605614e5b3dab828e4f33c300836deab421be34 (patch) | |
tree | 5d0f250f0ae24ba595b983c79fa9bad9045a650b /src/args.rs | |
parent | 11344455b0629f989d8b78c27ed0e7d654fc74ef (diff) | |
download | nitrocli-b605614e5b3dab828e4f33c300836deab421be34.tar.gz nitrocli-b605614e5b3dab828e4f33c300836deab421be34.tar.bz2 |
Use anyhow for error handling
This patch changes our error handling approach from the ground up:
instead of having a globally used Error enum that contains variants for
all possible errors, we now use anyhow's Error type. This approach is
more dynamic (and not statically typed), but it allows for more fine
grained error messages and overall more user-friendly error reporting.
Overall it also is a net simplification. While we have one dynamic cast
now, in order to be able to handle erroneous password/PIN entries
correctly, that is considered a reasonable compromise.
Diffstat (limited to 'src/args.rs')
-rw-r--r-- | src/args.rs | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/args.rs b/src/args.rs index 56a10b4..0f548e4 100644 --- a/src/args.rs +++ b/src/args.rs @@ -134,16 +134,14 @@ pub enum ConfigOption<T> { } impl<T> ConfigOption<T> { - pub fn try_from(disable: bool, value: Option<T>, name: &'static str) -> Result<Self, String> { + pub fn try_from(disable: bool, value: Option<T>, name: &'static str) -> anyhow::Result<Self> { if disable { - if value.is_some() { - Err(format!( - "--{name} and --no-{name} are mutually exclusive", - name = name - )) - } else { - Ok(ConfigOption::Disable) - } + anyhow::ensure!( + value.is_none(), + "--{name} and --no-{name} are mutually exclusive", + name = name + ); + Ok(ConfigOption::Disable) } else { match value { Some(value) => Ok(ConfigOption::Enable(value)), |