Crates.io | progressing |
lib.rs | progressing |
version | 3.0.2 |
source | src |
created_at | 2020-01-24 22:07:26.826229 |
updated_at | 2020-09-01 21:52:29.167629 |
description | A lightweight, text-based, counting progress-bar for Rust |
homepage | |
repository | https://github.com/dominicparga/progressing |
max_upload_size | |
id | 201664 |
size | 57,305 |
At first, the trait Baring
is needed.
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,
};
In the following, different use-cases of the provided progress-bars are presented.
Note, that the examples below use set(...)
, but add(...)
is supported as well.
Printing value 0.3
clamped to [0, 1]
prints [=====>------------]
.
let mut progress_bar = ClampingBar::new();
progress_bar.set_len(20);
progress_bar.set(0.3);
println!("{}", progress_bar);
Printing value 4
mapped from [-9, 5]
to [0, 1]
prints [================>-] (4 / 5)
.
let mut progress_bar = MappingBar::with_range(-9, 5);
progress_bar.set_len(20);
progress_bar.set(4);
println!("{}", progress_bar);
Every bar can be used with a simple time-approximation based on the past process.
For a process of this duration, this example would print [================>-] (4 / 5) ~ 2 min
.
The only difference is the call of timed()
.
let mut progress_bar = MappingBar::with_range(-9, 5).timed();
progress_bar.set_len(20);
progress_bar.set(4);
println!("{}", progress_bar);
In case something should be counted and failures may occur, try this example.
When counting 42
successes, where 60
is the goal and 130
attempts have been made, [============>-----] (42 / 60 # 130)
is printed.
Adding trials may be handier using bool
s.
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);
}
You may change a bar's style by setting it to a string of 5
characters.
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);
Another typical use-case may be printing some, not every progress in a loop.
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);
will print
[=>................] (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
A line is printed every time when another 10 %
of the goal is reached.
Please note, that the progress-bar starts with 13
and hence needs 113
attempts in total.
Just add progressing = '3'
to the dependencies in Cargo.toml
.
Please refer to the examples for some more examples.