3 个不稳定版本
0.2.0 | 2024 年 6 月 6 日 |
---|---|
0.1.1 | 2024 年 6 月 3 日 |
0.1.0 | 2024 年 6 月 3 日 |
#6 in #buildpack
260 每月下载量
74KB
1.5K SLoC
Bullet stream
带保险的文字列表打印
是什么
一个针对流式文本输出(脚本或构建包)的用户友好的日志记录器。格式松散地基于 Markdown 标题和项目符号,因此得名。
为什么
这项工作最初是 Heroku 的 Cloud Native Buildpack (CNB) 项目的共享输出格式,该项目是用 Rust 编写的。您可以在此处了解更多关于 Heroku 的 Cloud Native Buildpacks。
用法
将 bullet_stream 添加到您的项目中
$ cargo add bullet_stream
现在使用 Print
在脚本/构建包执行时输出结构化文本。输出预期由最终用户读取。
use bullet_stream::Print;
let mut output = Print::new(std::io::stdout())
.h2("Example Buildpack")
.warning("No Gemfile.lock found");
output = output
.bullet("Ruby version")
.done();
output.done();
生活风格指南
要查看输出格式并阅读生活风格指南,您可以运行
$ git clone <repo-url>
$ cargo run --example style_guide
颜色
在自然界中,颜色和对比用于强调差异和危险。 Output
利用常见的 ANSI 转义字符来突出显示重要的内容,并降低不重要的内容的突出度。输出体验从一开始就被设计为正确地流式传输到用户的终端。
一致的缩进和换行
帮助您的用户专注于正在发生的事情,而不是不一致的格式。 Output
是一个消耗性和有状态的架构。这意味着您可以使用 Rust 强大的类型系统来确保只有您期望的、以您想要的风格输出的内容被发送到屏幕。有关更多信息,请参阅 state
模块的文档。
需求
项目有一些独特的需求,这些需求可能乍一看并不明显
- 假设屏幕清除不可用:文本 UI 工具(如进度条)依赖于 ANSI 转义码来清除和重新绘制行,从而模拟动画。该项目的首要目标是用于像 git 钩这样的环境,其中每行都通过
remote >
前缀。该库提供替代的仅追加 "旋转器" 工具,用于表示时间的流逝,而无需重新绘制屏幕。 - 原子 ANSI:Bullet stream 使用 ANSI 代码来着色输出,但它无法预测流何时会断开。在这种情况下,我们不想让用户的屏幕意外变蓝(或其他颜色),因此该库优先考虑为每行输出写入 ANSI 重置代码。这也确保了像
remote >
这样的包装前缀不会意外着色。 - 易用性高于风格:虽然该项目使用ANSI代码来着色输出,但它依赖于大多数shell/终端/命令提示符可能支持的常见颜色。
- 区分自有输出和非自有输出:脚本作者发出的任何消息都是“自有”的,而在调用其他进程并流式传输输出时(如
bundle install
)则是“非自有”。子弹流使用引头字符和颜色来表示“自有”输出,而非自有输出则没有标记,通常缩进。 - 优先考虑易用性而非运行时性能:假设脚本/构建包将调用命令并执行网络或系统IO,这些操作的成本应该远远超过分配一个字符串的成本。这并不是说这个项目旨在无谓地昂贵,然而如果您的目标是原始流式传输性能,那么这个项目可能不适合您。