summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-05-28 10:56:13 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-05-31 11:35:39 +0200
commit2dc195d1e929fb89897e08584adb1013a8d10293 (patch)
tree27e20f3e3ad0bb8cd2518d737079e10ba35b5395
parent07e16931ea1bc6822464b21420147bd899a09510 (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.rs27
-rw-r--r--src/log/parser.rs36
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);
}
}