Skip to main content

pogress_bar/
lib.rs

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); // clear line and print
9}
10
11pub fn println(text: String) {
12	println!("\r{}\x1b[K", text); // clear line and print
13}
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}