summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/log/filesink.rs2
-rw-r--r--src/log/item.rs24
2 files changed, 16 insertions, 10 deletions
diff --git a/src/log/filesink.rs b/src/log/filesink.rs
index 6052254..d48e393 100644
--- a/src/log/filesink.rs
+++ b/src/log/filesink.rs
@@ -31,7 +31,7 @@ impl FileSink {
impl LogSink for FileSink {
fn log_item(&mut self, item: LogItem) -> Result<()> {
- let s: String = item.try_into()?;
+ let s = item.display()?;
writeln!(self.file, "{}", s)?;
Ok(())
}
diff --git a/src/log/item.rs b/src/log/item.rs
index 1e5d62a..9130045 100644
--- a/src/log/item.rs
+++ b/src/log/item.rs
@@ -19,17 +19,23 @@ pub enum LogItem {
State(Result<String, String>),
}
-impl TryInto<String> for LogItem {
- type Error = anyhow::Error;
-
- fn try_into(self) -> Result<String> {
+impl LogItem {
+ pub fn display(&self) -> Result<Display> {
match self {
- LogItem::Line(v) => String::from_utf8(v).map_err(Error::from),
- LogItem::Progress(u) => Ok(format!("#BUTIDO:PROGRESS:{}", u)),
- LogItem::CurrentPhase(p) => Ok(format!("#BUTIDO:PHASE:{}", p)),
- LogItem::State(Ok(s)) => Ok(format!("#BUTIDO:STATE:OK:{}", s)),
- LogItem::State(Err(s)) => Ok(format!("#BUTIDO:STATE:ERR:{}", s)),
+ LogItem::Line(s) => Ok(Display(String::from_utf8(s.to_vec())?)),
+ LogItem::Progress(u) => Ok(Display(format!("#BUTIDO:PROGRESS:{}", u))),
+ LogItem::CurrentPhase(p) => Ok(Display(format!("#BUTIDO:PHASE:{}", p))),
+ LogItem::State(Ok(s)) => Ok(Display(format!("#BUTIDO:STATE:OK:{}", s))),
+ LogItem::State(Err(s)) => Ok(Display(format!("#BUTIDO:STATE:ERR:{}", s))),
}
}
}
+pub struct Display(String);
+
+impl std::fmt::Display for Display {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
+ write!(f, "{}", self.0)
+ }
+}
+