diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-05-28 10:56:13 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-05-31 11:35:39 +0200 |
commit | 2dc195d1e929fb89897e08584adb1013a8d10293 (patch) | |
tree | 27e20f3e3ad0bb8cd2518d737079e10ba35b5395 | |
parent | 07e16931ea1bc6822464b21420147bd899a09510 (diff) |
Make job-successfullness-check less boolish
This patch changes the interface from `-> Option<bool>` to something more
explanatory.
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/db.rs | 27 | ||||
-rw-r--r-- | src/log/parser.rs | 36 |
2 files changed, 41 insertions, 22 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs index c38744b..54d5c90 100644 --- a/src/commands/db.rs +++ b/src/commands/db.rs @@ -33,6 +33,7 @@ use log::info; use crate::config::Configuration; use crate::db::models; use crate::db::DbConnectionConfig; +use crate::log::JobResult; use crate::package::Script; use crate::schema; @@ -271,9 +272,9 @@ fn submit(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> for j in jobs.iter() { match crate::log::ParsedLog::from_str(&j.log_text)?.is_successfull() { - None => unkn += 1, - Some(true) => succ += 1, - Some(false) => err += 1, + JobResult::Unknown => unkn += 1, + JobResult::Success => succ += 1, + JobResult::Errored => err += 1, } } @@ -533,9 +534,9 @@ fn job(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMa let data = vec![vec![ data.0.uuid.to_string(), String::from(match success { - Some(true) => "yes", - Some(false) => "no", - None => "unknown", + JobResult::Success => "yes", + JobResult::Errored => "no", + JobResult::Unknown => "unknown", }), data.3.name.to_string(), data.3.version.to_string(), @@ -577,15 +578,15 @@ fn job(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMa "#, job_uuid = match success { - Some(true) => data.0.uuid.to_string().green(), - Some(false) => data.0.uuid.to_string().red(), - None => data.0.uuid.to_string().cyan(), + JobResult::Success => data.0.uuid.to_string().green(), + JobResult::Errored => data.0.uuid.to_string().red(), + JobResult::Unknown => data.0.uuid.to_string().cyan(), }, submit_uuid = data.1.uuid.to_string().cyan(), succeeded = match success { - Some(true) => String::from("yes").green(), - Some(false) => String::from("no").red(), - None => String::from("unknown").cyan(), + JobResult::Success => String::from("yes").green(), + JobResult::Errored => String::from("no").red(), + JobResult::Unknown => String::from("unknown").cyan(), }, package_name = data.3.name.cyan(), package_version = data.3.version.cyan(), @@ -729,6 +730,6 @@ fn releases(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: & /// /// Returns Ok(None) if cannot be decided fn is_job_successfull(job: &models::Job) -> Result<Option<bool>> { - crate::log::ParsedLog::from_str(&job.log_text).map(|pl| pl.is_successfull()) + crate::log::ParsedLog::from_str(&job.log_text).map(|pl| pl.is_successfull().to_bool()) } diff --git a/src/log/parser.rs b/src/log/parser.rs index 7dab54d..7168ed4 100644 --- a/src/log/parser.rs +++ b/src/log/parser.rs @@ -50,17 +50,35 @@ impl FromStr for ParsedLog { } } +#[derive(Debug, Eq, PartialEq)] +pub enum JobResult { + Success, + Errored, + Unknown +} + +impl JobResult { + pub fn to_bool(&self) -> Option<bool> { + match self { + JobResult::Success => Some(true), + JobResult::Errored => Some(false), + JobResult::Unknown => None, + } + } +} + impl ParsedLog { - pub fn is_successfull(&self) -> Option<bool> { + pub fn is_successfull(&self) -> JobResult { self.0 .iter() .rev() .filter_map(|line| match line { - LogItem::State(Ok(_)) => Some(true), - LogItem::State(Err(_)) => Some(false), + LogItem::State(Ok(_)) => Some(JobResult::Success), + LogItem::State(Err(_)) => Some(JobResult::Errored), _ => None, }) .next() + .unwrap_or(JobResult::Unknown) } pub fn into_iter(self) -> impl Iterator<Item = LogItem> { @@ -353,7 +371,7 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), None); + assert_eq!(log.is_successfull(), JobResult::Unknown); } #[test] @@ -363,7 +381,7 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), None); + assert_eq!(log.is_successfull(), JobResult::Unknown); } #[test] @@ -373,7 +391,7 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), None); + assert_eq!(log.is_successfull(), JobResult::Unknown); } #[test] @@ -383,7 +401,7 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), Some(true)); + assert_eq!(log.is_successfull(), JobResult::Success); } #[test] @@ -393,7 +411,7 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), Some(false)); + assert_eq!(log.is_successfull(), JobResult::Errored); } #[test] @@ -413,6 +431,6 @@ mod tests { "}; let log = ParsedLog::from_str(buffer).unwrap(); - assert_eq!(log.is_successfull(), Some(true)); + assert_eq!(log.is_successfull(), JobResult::Success); } } |