1pub mod progress_bar;
2pub mod cargo_bar;
3pub mod apt_bar;
4pub mod chalk_bar;
5pub mod errors;
6
7pub fn print(text: String) {
8 print!("\r{}\x1b[K", text); }
10
11pub fn println(text: String) {
12 println!("\r{}\x1b[K", text); }
14
15pub trait ProgressBar {
16 fn new(length: u32, max_range: u32) -> Self;
17
18 fn set_value(&mut self, new_val: u32) -> Result<(), errors::ProgBarError>;
19
20 fn draw(&self) -> Result<(), errors::ProgBarError>;
21
22 fn update(&mut self, new_val: u32) -> Result<(), errors::ProgBarError> {
23 self.set_value(new_val)?;
24 self.draw()?;
25 Ok(())
26 }
27}
28
29pub struct ChalkProgressBarGroup {
30 bars: Vec<chalk_bar::ChalkProgressBar>,
31 curs_pos: i16
32}
33
34impl ChalkProgressBarGroup {
35 pub fn new(num_bars: u32, bar_length: u32, bar_range_max: u32) -> ChalkProgressBarGroup {
36 ChalkProgressBarGroup {
37 bars: vec![<chalk_bar::ChalkProgressBar>::new(bar_length, bar_range_max); num_bars as usize],
38 curs_pos: 0
39 }
40 }
41
42 pub fn draw(&mut self) {
43 for bar in self.bars.iter_mut() {
44 (*bar).draw().unwrap();
45 println!();
46 }
47 self.curs_pos += self.bars.len() as i16;
48 }
49
50 pub fn update(&mut self, idx: usize, val: u32) {
51 self.move_cursor_down(idx as i16 - self.curs_pos);
52 self.bars[idx].update(val).unwrap();
53 }
54
55 pub fn move_cursor_down(&mut self, lines: i16) {
56 self.curs_pos += lines;
57 if lines < 0 {
58
59 print!("\x1b[{}A", -lines);
60 } else if lines > 0 {
61 print!("\x1b[{}B", lines);
62 }
63 }
64
65 pub fn println(&mut self, text: String) {
66 self.move_cursor_down(-self.curs_pos);
67 println!("\r{}\x1b[K", text);
68 self.draw();
69 }
70}