rich/
rich.rs

1use kdam::{BarExt, Column, RichProgress, Spinner, term, term::Colorizer, tqdm};
2use std::io::{IsTerminal, Result, stderr};
3
4fn main() -> Result<()> {
5    term::init(stderr().is_terminal());
6    term::hide_cursor()?;
7
8    let mut pb = RichProgress::new(
9        tqdm!(
10            total = 231231231,
11            unit_scale = true,
12            unit_divisor = 1024,
13            unit = "B"
14        ),
15        vec![
16            Column::Spinner(Spinner::new(
17                &["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
18                80.0,
19                1.0,
20            )),
21            Column::Text("[bold blue]?".to_owned()),
22            Column::Animation,
23            Column::Percentage(1),
24            Column::Text("•".to_owned()),
25            Column::CountTotal,
26            Column::Text("•".to_owned()),
27            Column::Rate,
28            Column::Text("•".to_owned()),
29            Column::RemainingTime,
30        ],
31    );
32
33    pb.write("download will begin in 5 seconds".colorize("bold red"))?;
34
35    while pb.pb.elapsed_time() <= 5.0 {
36        pb.refresh()?;
37    }
38
39    pb.replace(1, Column::Text("[bold blue]docker.exe".to_owned()));
40    pb.write("downloading docker.exe".colorize("bold cyan"))?;
41
42    let total_size = 231231231;
43    let mut downloaded = 0;
44
45    while downloaded < total_size {
46        let new = std::cmp::min(downloaded + 223211, total_size);
47        downloaded = new;
48        pb.update_to(new)?;
49        std::thread::sleep(std::time::Duration::from_millis(12));
50    }
51
52    pb.write("downloaded docker.exe".colorize("bold green"))?;
53    eprintln!();
54
55    Ok(())
56}