3 个不稳定版本
0.2.0 | 2021 年 12 月 13 日 |
---|---|
0.1.1 | 2021 年 11 月 25 日 |
0.1.0 | 2021 年 11 月 24 日 |
在 命令行界面 中排名 #547
每月下载量 14,785
在 2 crates 中使用
11KB
111 行
status-line
此包允许您在终端中显示状态和进度信息
此包处理在终端中显示少量文本信息、定期刷新并最终删除的问题,类似于进度条显示的方式。
状态行可以看作是进度条的泛化。与进度条绘制 Crates 不同,此包不需要将状态文本渲染为进度条。它不强制要求任何特定的数据格式或模板,也不提供格式化帮助。
状态行文本可以包含任何您希望的信息,甚至可以分成多行。您完全控制数据模型以及数据如何打印到屏幕上。使用标准 Display
特性将数据转换为打印的文本。
状态更新可以以非常高的频率进行,高达每秒数百万次更新。 StatusLine
通过使用后台线程以低频率处理文本打印来解耦重绘速率与数据更新速率。
示例
use std::fmt::{Display, Formatter};
use std::sync::atomic::{AtomicU64, Ordering};
use status_line::StatusLine;
// Define the data model representing the status of your app.
// Make sure it is Send + Sync, so it can be read and written from different threads:
struct Progress(AtomicU64);
// Define how you want to display it:
impl Display for Progress {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}%", self.0.load(Ordering::Relaxed))
}
}
// StatusLine takes care of displaying the progress data:
let status = StatusLine::new(Progress(AtomicU64::new(0))); // shows 0%
status.0.fetch_add(1, Ordering::Relaxed); // shows 1%
status.0.fetch_add(1, Ordering::Relaxed); // shows 2%
drop(status) // hides the status line
依赖项
~235KB