From 7af38e684d58562762924dd9d5027fd92e1dfaa8 Mon Sep 17 00:00:00 2001 From: mo8it Date: Sat, 28 Jun 2025 01:44:36 +0200 Subject: Print newline after progress on failure --- src/term.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/term.rs') 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 { + 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, -- cgit v1.2.3