summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-05-10 14:43:45 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-05-11 10:47:59 +0200
commit79fa2aebeb9c5daafd72e061466de97c4fcacc36 (patch)
tree6595c708b5c4765a791d3e1bf88009c0072ff18d
parentca55fb3a9cb77b2ed22335adfe9f7bc986c37aaa (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.rs3
-rw-r--r--src/commands/db.rs6
-rw-r--r--src/log/parser.rs11
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()