From c66f141e26c11c641f2959f88e7f00a951cb567f Mon Sep 17 00:00:00 2001 From: sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> Date: Fri, 12 Feb 2021 16:24:50 +0100 Subject: pkgs/profpatsch/nman: refactor exit code handling, print error messages * make exit code determination nicer syntactically by using an impl * add .msg() function which returns an appropriate error message for every error type. --- pkgs/profpatsch/nman/nman.rs | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'pkgs/profpatsch') diff --git a/pkgs/profpatsch/nman/nman.rs b/pkgs/profpatsch/nman/nman.rs index 475b42dd..53fd4b77 100644 --- a/pkgs/profpatsch/nman/nman.rs +++ b/pkgs/profpatsch/nman/nman.rs @@ -40,6 +40,8 @@ fn mktemp(suffix: &str) -> std::io::Result { } } +// TODO(sterni): distinguish between cmd not found and cmd failure +// TODO(sterni): track helpful error context in this enum enum NmanError { NoTempDir, Instantiate, @@ -50,16 +52,29 @@ enum NmanError { Usage, } -// TODO(sterni): return 127 for cmd not found -fn nman_error_exit_code(err: NmanError) -> i32 { - match err { - NmanError::NoTempDir => 9, - NmanError::Instantiate => 10, - NmanError::Build => 11, - NmanError::Man => 12, - NmanError::NotFound => 1, - NmanError::NixParseError => 69, // EX_SOFTWARE - NmanError::Usage => 64, // EX_USAGE +impl NmanError { + fn code(&self) -> i32 { + match self { + NmanError::NoTempDir => 9, + NmanError::Instantiate => 10, + NmanError::Build => 11, + NmanError::Man => 12, + NmanError::NotFound => 1, + NmanError::NixParseError => 69, // EX_SOFTWARE + NmanError::Usage => 64, // EX_USAGE + } + } + + fn msg(&self) -> &str { + match self { + NmanError::NoTempDir => "failed to create temporary directory", + NmanError::Instantiate => "failure evaluating the attribute", + NmanError::Build => "failed to realise derivation", + NmanError::Man => "couldn't open man page using man(1)", + NmanError::NotFound => "desired man page could not be found", + NmanError::NixParseError => "nix executable produced unexpected output", + NmanError::Usage => "usage error", + } } } @@ -248,7 +263,10 @@ fn main() -> std::io::Result<()> { match open_man_page(attr, section, page) { Ok(_) => Ok(()), // TODO(sterni): print error message - Err(t) => std::process::exit(nman_error_exit_code(t)), + Err(t) => { + println!("error: {}", t.msg()); + std::process::exit(t.code()) + }, }, } } @@ -281,7 +299,7 @@ fn main() -> std::io::Result<()> { // TODO(sterni): stderr println!("usage error: {}", msg); dispatch_action(&args[0], CliAction::Usage); - std::process::exit(nman_error_exit_code(NmanError::Usage)); + std::process::exit(NmanError::Usage.code()); }, } } -- cgit 1.4.1