summaryrefslogtreecommitdiffstats
path: root/src/log
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-11-13 11:30:49 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-11-13 11:30:49 +0100
commit301e48fac22c1c73201610ef07ff29cf2647c824 (patch)
treea54efa7ea9829e42ebf81f58effde166dc64b476 /src/log
parent5f2c600fded421b57ebf44558f8d5dffe8e5580e (diff)
Add helper to check whether a log text reports success
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/log')
-rw-r--r--src/log/parser.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/log/parser.rs b/src/log/parser.rs
index f95cc1c..00b0bea 100644
--- a/src/log/parser.rs
+++ b/src/log/parser.rs
@@ -1,11 +1,14 @@
use std::result::Result as RResult;
use std::str::FromStr;
+use anyhow::Error;
+use anyhow::Result;
use futures::AsyncBufReadExt;
use futures::Stream;
use futures::StreamExt;
use futures::TryStreamExt;
use pom::parser::Parser as PomParser;
+use resiter::Filter;
use shiplift::tty::TtyChunk;
use crate::log::LogItem;
@@ -22,6 +25,28 @@ pub fn buffer_stream_to_line_stream<S>(stream: S) -> impl Stream<Item = IoResult
.lines()
}
+pub fn log_is_successfull(log: &str) -> Result<Option<bool>> {
+
+ let p = parser();
+ let i = log.lines()
+ .map(|line| p.parse(line.as_bytes()).map_err(Error::from))
+ .filter_ok(|line| match line {
+ LogItem::State(_) => true,
+ _ => false,
+ })
+ .collect::<Result<Vec<_>>>()?;
+
+ Ok({ i.into_iter()
+ .rev()
+ .next()
+ .and_then(|ll| match ll {
+ LogItem::State(Ok(_)) => Some(true),
+ LogItem::State(Err(_)) => Some(false),
+ _ => None,
+ })
+ })
+}
+
pub fn parser<'a>() -> PomParser<'a, u8, LogItem> {
use pom::parser::*;