pub struct Progress {
enabled: bool,
current: u64,
total: u64,
percent: u32,
}
impl Progress {
pub fn new(total: u64) -> Self {
assert_ne!(total, 0);
let enabled =
std::env::var("OXIDD_TESTING_PROGRESS").is_ok_and(|v| !v.is_empty() && v != "0");
let mut this = Self {
enabled,
current: 0,
total,
percent: 1, };
this.print();
this
}
pub fn step(&mut self) {
self.current += 1;
self.print()
}
pub fn done(&mut self) {
if self.enabled {
eprintln!();
}
if self.current != self.total {
eprintln!(
"WARNING: total number has changed ({} -> {})",
self.total, self.current,
);
}
}
pub fn print(&mut self) {
if !self.enabled {
return;
}
let percent = (self.current * 100 / self.total) as u32;
if percent != self.percent {
self.percent = percent;
eprint!("\r{percent} %");
std::io::Write::flush(&mut std::io::stderr()).unwrap();
}
}
}