13 个稳定版本
3.0.2 | 2020年9月1日 |
---|---|
2.2.3 | 2020年3月27日 |
2.2.0 | 2020年1月31日 |
1.0.3 | 2020年1月25日 |
#221 在 命令行界面
380 每月下载次数
在 4 个包 中使用
32KB
722 行
progressing
外观和感觉
首先,需要 trait Baring
。
use progressing::{
// The underlying Trait
Baring,
// Just handy names for the examples below
bernoulli::Bar as BernoulliBar,
clamping::Bar as ClampingBar,
mapping::Bar as MappingBar,
};
以下展示了提供的进度条的多种使用场景。请注意,下面的例子使用了 set(...)
,但也支持 add(...)
。
-
打印值
0.3
被限制在[0, 1]
内,打印[=====>------------]
。let mut progress_bar = ClampingBar::new(); progress_bar.set_len(20); progress_bar.set(0.3); println!("{}", progress_bar);
-
打印值
4
从[-9, 5]
映射到[0, 1]
,打印[================>-] (4 / 5)
。let mut progress_bar = MappingBar::with_range(-9, 5); progress_bar.set_len(20); progress_bar.set(4); println!("{}", progress_bar);
-
每个条形图都可以使用基于过去过程的简单时间近似来使用。对于这个持续时间的过程,这个例子将打印
[================>-] (4 / 5) ~ 2 min
。唯一的区别是调用了timed()
。let mut progress_bar = MappingBar::with_range(-9, 5).timed(); progress_bar.set_len(20); progress_bar.set(4); println!("{}", progress_bar);
-
如果需要计数并且可能发生故障,请尝试这个例子。当计数
42
次成功时,其中60
是目标,且已尝试130
次,将打印[============>-----] (42 / 60 # 130)
。使用bool
添加试验可能更方便。let mut progress_bar = BernoulliBar::from_goal(60); progress_bar.set_len(20); progress_bar.set((42, 130)); println!("{}", progress_bar); let is_successful = true; if is_successful { // Does increase both 42 and 130 progress_bar.add(true); } else { // Does increase 130 only progress_bar.add(false); }
-
您可以通过将其设置为包含
5
个字符的字符串来更改条形的样式。let mut progress_bar = ClampingBar::new(); progress_bar.set_len(20); progress_bar.set(0.3); // different custom styles are possible // prints (----->............) progress_bar.set_style("(->.)"); println!("{}", progress_bar); // prints [##### ] progress_bar.set_style("[# ]"); println!("{}", progress_bar); // prints (#####-------------) progress_bar.set_style("(#--)"); println!("{}", progress_bar);
-
另一个典型用例可能是循环中打印一些而不是所有进度。
let mut progress_bar = BernoulliBar::with_goal(100).timed(); progress_bar.set_len(20); progress_bar.set(13); // do the job and show progress for _ in 0..100 { progress_bar.add(true); if progress_bar.has_progressed_significantly() { progress_bar.remember_significant_progress(); println!("{}", progress_bar); } std::thread::sleep(std::time::Duration::from_millis(100)); } println!("{}", progress_bar);
将打印
[=>................] (10/100) #14 ~8s [===>..............] (20/100) #20 ~7s [=====>............] (30/100) #30 ~6s [=======>..........] (40/100) #40 ~5s [=========>........] (50/100) #50 ~4s [==========>.......] (60/100) #60 ~3s [============>.....] (70/100) #70 ~2s [==============>...] (80/100) #80 ~1s [================>.] (90/100) #90 ~0s [==================] (100/100) #100 ~0s [==================] (100/100) #113 ~0s
每当达到目标
10 %
的一次时,就会打印一行。请注意,进度条从13
开始,因此总共需要113
次尝试。
设置和使用
只需将 progressing = '3'
添加到 Cargo.toml
中的依赖项。
请参阅示例以获取更多示例。
依赖关系
~88KB