#error #hint #cli #error-message

giveup

面向用户的错误信息和提示

1 个不稳定版本

0.1.0 2022 年 12 月 26 日

#739 in 命令行界面

MIT 许可证

8KB
86

Giveup

giveup 是一个用于封装和优雅显示 Result 的轻量级抽象,用于最终用户。

它旨在作为 expectunwrap_or_else 的替代品使用,如果发生错误导致程序终止。

示例

// 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")

动机

在上面的场景中,expect 使用不当,因为我们不希望 CLI 的用户面对一个 panic

目标是显示一个易于阅读的错误消息并提供尽可能多的帮助,以便用户可以回到他们最初想要做的事情(这从来不是修复自己正在使用的工具的一些问题)。

我的通常解决方案看起来可能像这样

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);
});

在这种情况下,差异并不是世界性的,但使用 unwrap_or_else 可能会非常冗长,因为会有大量的样板代码重复出现。此外,giveup 更适合使用变量进行动态错误消息。

反馈

我主要为我个人的使用编写了 giveup,所以我非常希望得到您的 反馈

依赖关系

~0–9.5MB
~43K SLoC