summaryrefslogtreecommitdiff
path: root/src/progress.rs
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-08-06 09:41:34 +0300
committerLars Wirzenius <liw@liw.fi>2021-08-06 10:21:58 +0300
commita54cbbb7f3d3750f4c3fea3ba999dac978ec394a (patch)
treeab941b542ff104664af5feb174e97eb271bbfc54 /src/progress.rs
parent6fc3ad8a6758bb6c764ba208d814c1ab82d764ac (diff)
downloadvmadm-a54cbbb7f3d3750f4c3fea3ba999dac978ec394a.tar.gz
feat: add progress reporting
Sponsored-by: author
Diffstat (limited to 'src/progress.rs')
-rw-r--r--src/progress.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/progress.rs b/src/progress.rs
new file mode 100644
index 0000000..52ade35
--- /dev/null
+++ b/src/progress.rs
@@ -0,0 +1,40 @@
+//! Show progress, or not.
+
+#[derive(Debug, Clone, Copy)]
+pub enum MessageKind {
+ OnlyErrors,
+ Steps,
+ Everything,
+}
+
+pub struct Progress {
+ level: MessageKind,
+}
+
+impl Progress {
+ pub fn new(level: MessageKind) -> Self {
+ Self { level }
+ }
+
+ fn message(&self, prefix: &str, msg: &str) {
+ eprintln!("{}: {}", prefix, msg);
+ }
+
+ pub fn chatty(&self, msg: &str) {
+ if let MessageKind::Everything = self.level {
+ self.message("DEBUG", msg);
+ }
+ }
+
+ pub fn step(&self, msg: &str) {
+ match self.level {
+ MessageKind::Everything | MessageKind::Steps => self.message("INFO", msg),
+ _ => (),
+ }
+ }
+
+ pub fn error(&self, msg: &str) {
+ // Errors are always written out.
+ self.message("ERROR", msg);
+ }
+}