giveup 0.1.0

User-geared error messages and hints
Documentation
  • Coverage
  • 100%
    6 out of 6 items documented2 out of 2 items with examples
  • Size
  • Source code size: 10.76 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.24 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • thass0/giveup
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • d4ckard

Giveup

giveup is a tiny abstraction for wrapping and nicely displaying Results to end-users.

It is meant to be used as a replacement for expect or unwrap_or_else, if an error occured which terminates the program.

Example

// Here reading the config at the start of the cli app
// fails because the user has not yet created a config file.
let config = Config::read(/*config-path*/)
    .hint("Create a configuration file")
    .example("touch config-filename")
    .giveup("Missing configuration file")

Motivation

In the above scenario expect is misplaced because we don't want the user of the cli to be confronted with a panic.

To goal is to display an easily readable error messag and offer as much help as possible, so the user can get back to what they originally intended to do (which never is fixing some issues of the tool one is using).

My usual solution would look somewhat like this:

let config = Config::read(/*config-path*/).unwrap_or_else(|err| {
    eprintln!("Missing configuration file: {}\n \
        Create a new configuration file: `touch config-filename`",
        err);
    std::process::exit(1);
});

In this case the difference is not world-chaning but using unwrap_or_else can get pretty verbose with lot's of boilerplate repeating over and over again. Also giveup is more friendly to dynamic error messages using variables.

Feedback

I primarily wrote giveup for my personal use so I would love to get your feedback.