#output #printing #script #ansi #buildpack #output-format

bullet_stream

带保险的文字列表打印

3 个不稳定版本

0.2.0 2024 年 6 月 6 日
0.1.1 2024 年 6 月 3 日
0.1.0 2024 年 6 月 3 日

#6 in #buildpack

Download history 187/week @ 2024-05-29 346/week @ 2024-06-05 157/week @ 2024-06-12 1/week @ 2024-06-19 15/week @ 2024-06-26 11/week @ 2024-07-03 14/week @ 2024-07-10 32/week @ 2024-07-17 191/week @ 2024-07-24

260 每月下载量

MIT 许可证

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,这些操作的成本应该远远超过分配一个字符串的成本。这并不是说这个项目旨在无谓地昂贵,然而如果您的目标是原始流式传输性能,那么这个项目可能不适合您。

无运行时依赖