use std::io;
use std::io::Write;
use std::time::Instant;
pub struct ProgressBar {
total: usize,
duration: usize,
start_time: Instant,
}
impl ProgressBar {
pub fn new(total: usize, duration: usize) -> Self {
ProgressBar {
total,
duration,
start_time: Instant::now(),
}
}
pub fn inc(&mut self, value: usize) {
let progress_percentage = (value as f64 / self.total as f64) * 100.0;
let elapsed_time = self.start_time.elapsed().as_secs() as usize;
let remaining_time = if elapsed_time > 0 {
self.duration - elapsed_time
} else {
0
};
let progress_bar = format!(
"\x1B[32m{}>\x1B[0m",
"=".repeat((progress_percentage / 2.0).floor() as usize),
);
if remaining_time < 60 {
println!(
"\x1B[2J\x1B[HFlooding in Progress: [{:<60}] {:.2}% | Remaining Time: {}s",
progress_bar, progress_percentage, remaining_time
);
} else {
println!(
"\x1B[2J\x1B[HFlooding in Progress: [{:<60}>] {:.2}% | Remaining Time: {}min",
progress_bar,
progress_percentage,
remaining_time / 60
);
}
io::stdout().flush().unwrap();
}
}