summaryrefslogtreecommitdiff
path: root/src/term.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/term.rs')
-rw-r--r--src/term.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/term.rs b/src/term.rs
index 1e08c84..fe188c0 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -160,6 +160,38 @@ impl<'a, 'lock> CheckProgressVisualizer<'a, 'lock> {
}
}
+pub struct ProgressCounter<'a, 'lock> {
+ stdout: &'a mut StdoutLock<'lock>,
+ total: usize,
+ counter: usize,
+}
+
+impl<'a, 'lock> ProgressCounter<'a, 'lock> {
+ pub fn new(stdout: &'a mut StdoutLock<'lock>, total: usize) -> io::Result<Self> {
+ write!(stdout, "Progress: 0/{total}")?;
+ stdout.flush()?;
+
+ Ok(Self {
+ stdout,
+ total,
+ counter: 0,
+ })
+ }
+
+ pub fn increment(&mut self) -> io::Result<()> {
+ self.counter += 1;
+ write!(self.stdout, "\rProgress: {}/{}", self.counter, self.total)?;
+ self.stdout.flush()
+ }
+}
+
+impl Drop for ProgressCounter<'_, '_> {
+ fn drop(&mut self) {
+ let _ = self.stdout.write_all(b"\n\n");
+ let _ = self.stdout.flush();
+ }
+}
+
pub fn progress_bar<'a>(
writer: &mut impl CountedWrite<'a>,
progress: u16,