At first, the trait Baring
is needed.
rust
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 [=====>------------]
.
rust
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)
.
rust
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()
.
rust
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.
```rust let mut progressbar = BernoulliBar::fromgoal(60); progressbar.setlen(20); progressbar.set((42, 130)); println!("{}", progressbar);
let issuccessful = true; if issuccessful { // Does increase both 42 and 130 progressbar.add(true); } else { // Does increase 130 only progressbar.add(false); } ```
You may change a bar's style by setting it to a string of 5
characters.
```rust let mut progressbar = ClampingBar::new(); progressbar.setlen(20); progressbar.set(0.3);
// different custom styles are possible
// prints (----->............) progressbar.setstyle("(->.)"); println!("{}", progress_bar);
// prints [##### ] progressbar.setstyle("[# ]"); println!("{}", progress_bar);
// prints (#####-------------) progressbar.setstyle("(#--)"); println!("{}", progress_bar); ```
Another typical use-case may be printing some, not every progress in a loop.
```rust let mut progressbar = BernoulliBar::withgoal(100).timed(); progressbar.setlen(20); progress_bar.set(13);
// do the job and show progress for _ in 0..100 { progressbar.add(true); if progressbar.hasprogressedsignificantly() { progressbar.remembersignificantprogress(); println!("{}", progressbar); }
std::thread::sleep(std::time::Duration::frommillis(100)); } println!("{}", progressbar); ```
will print
text
[=>................] (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.