44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
|
use std::thread;
|
||
|
use std::time::Duration;
|
||
|
|
||
|
use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
|
||
|
use rand::{thread_rng, Rng};
|
||
|
|
||
|
fn main() {
|
||
|
let styles = [
|
||
|
("Rough bar:", "█ ", "red"),
|
||
|
("Fine bar: ", "█▉▊▋▌▍▎▏ ", "yellow"),
|
||
|
("Vertical: ", "█▇▆▅▄▃▂▁ ", "green"),
|
||
|
("Fade in: ", "█▓▒░ ", "blue"),
|
||
|
("Blocky: ", "█▛▌▖ ", "magenta"),
|
||
|
];
|
||
|
|
||
|
let m = MultiProgress::new();
|
||
|
|
||
|
let handles: Vec<_> = styles
|
||
|
.iter()
|
||
|
.map(|s| {
|
||
|
let pb = m.add(ProgressBar::new(512));
|
||
|
pb.set_style(
|
||
|
ProgressStyle::with_template(&format!("{{prefix:.bold}}▕{{bar:.{}}}▏{{msg}}", s.2))
|
||
|
.unwrap()
|
||
|
.progress_chars(s.1),
|
||
|
);
|
||
|
pb.set_prefix(s.0);
|
||
|
let wait = Duration::from_millis(thread_rng().gen_range(10..30));
|
||
|
thread::spawn(move || {
|
||
|
for i in 0..512 {
|
||
|
thread::sleep(wait);
|
||
|
pb.inc(1);
|
||
|
pb.set_message(format!("{:3}%", 100 * i / 512));
|
||
|
}
|
||
|
pb.finish_with_message("100%");
|
||
|
})
|
||
|
})
|
||
|
.collect();
|
||
|
|
||
|
for h in handles {
|
||
|
let _ = h.join();
|
||
|
}
|
||
|
}
|