diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-05-10 14:43:45 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-05-11 10:47:59 +0200 |
commit | 79fa2aebeb9c5daafd72e061466de97c4fcacc36 (patch) | |
tree | 6595c708b5c4765a791d3e1bf88009c0072ff18d | |
parent | ca55fb3a9cb77b2ed22335adfe9f7bc986c37aaa (diff) |
Refactor: Implement FromStr
Instead of having a function `&str -> Result<Self>` on the type, implement the
`std::str::FromStr` trait to be more rusty here.
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/build.rs | 3 | ||||
-rw-r--r-- | src/commands/db.rs | 6 | ||||
-rw-r--r-- | src/log/parser.rs | 11 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/commands/build.rs b/src/commands/build.rs index 07d2ce8..b8a0727 100644 --- a/src/commands/build.rs +++ b/src/commands/build.rs @@ -11,6 +11,7 @@ use std::io::Write; use std::path::Path; use std::path::PathBuf; +use std::str::FromStr; use std::sync::Arc; use anyhow::anyhow; @@ -407,7 +408,7 @@ pub async fn build( data.1.version.to_string().red() )?; - let parsed_log = crate::log::ParsedLog::build_from(&data.0.log_text)?; + let parsed_log = crate::log::ParsedLog::from_str(&data.0.log_text)?; let mut last_phase = None; let mut error_catched = false; let lines = parsed_log diff --git a/src/commands/db.rs b/src/commands/db.rs index 9fc1e77..062858b 100644 --- a/src/commands/db.rs +++ b/src/commands/db.rs @@ -485,7 +485,7 @@ fn job(conn_cfg: DbConnectionConfig, config: &Configuration, matches: &ArgMatche models::Image, )>(&conn)?; - let parsed_log = crate::log::ParsedLog::build_from(&data.0.log_text)?; + let parsed_log = crate::log::ParsedLog::from_str(&data.0.log_text)?; let success = parsed_log.is_successfull(); if csv { @@ -643,7 +643,7 @@ fn log_of(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { .select(schema::jobs::dsl::log_text) .first::<String>(&conn) .map_err(Error::from) - .and_then(crate::log::ParsedLog::build_from)? + .and_then(|s| crate::log::ParsedLog::from_str(&s))? .iter() .map(|line| line.display().and_then(|d| writeln!(lock, "{}", d).map_err(Error::from))) .collect::<Result<Vec<()>>>() @@ -697,6 +697,6 @@ fn releases(conn_cfg: DbConnectionConfig, config: &Configuration, matches: &ArgM /// /// Returns Ok(None) if cannot be decided fn is_job_successful(job: &models::Job) -> Result<Option<bool>> { - crate::log::ParsedLog::build_from(&job.log_text).map(|pl| pl.is_successfull()) + crate::log::ParsedLog::from_str(&job.log_text).map(|pl| pl.is_successfull()) } diff --git a/src/log/parser.rs b/src/log/parser.rs index 6dcb9e3..764b732 100644 --- a/src/log/parser.rs +++ b/src/log/parser.rs @@ -38,16 +38,19 @@ where pub struct ParsedLog(Vec<LogItem>); -impl ParsedLog { - pub fn build_from<S: AsRef<str>>(s: S) -> Result<Self> { +impl FromStr for ParsedLog { + type Err = anyhow::Error; + + fn from_str(s: &str) -> Result<Self> { let p = parser(); - s.as_ref() - .lines() + s.lines() .map(|line| p.parse(line.as_bytes()).map_err(Error::from)) .collect::<Result<Vec<_>>>() .map(ParsedLog) } +} +impl ParsedLog { pub fn is_successfull(&self) -> Option<bool> { self.0 .iter() |