summaryrefslogtreecommitdiffstats
path: root/src/log
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-11-13 18:03:19 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-11-13 18:33:51 +0100
commit51cc273b8e6dcb0b52f9e900e579fa685b271e71 (patch)
tree7eb615ff59f665bb958f9492a7bcf94ac9116c5b /src/log
parentac134aba4b7928c6593f8896809067057dfb4869 (diff)
Add ParsedLog type, which holds a list of parsed log lines
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/log')
-rw-r--r--src/log/parser.rs45
1 files changed, 25 insertions, 20 deletions
diff --git a/src/log/parser.rs b/src/log/parser.rs
index 00b0bea..6163bc8 100644
--- a/src/log/parser.rs
+++ b/src/log/parser.rs
@@ -25,26 +25,31 @@ 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 struct ParsedLog(Vec<LogItem>);
+
+impl ParsedLog {
+ pub fn build_from(s: &str) -> Result<Self> {
+ let p = parser();
+ s.lines()
+ .map(|line| p.parse(line.as_bytes()).map_err(Error::from))
+ .collect::<Result<Vec<_>>>()
+ .map(ParsedLog)
+ }
+
+ pub fn is_successfull(&self) -> Option<bool> {
+ self.0.iter()
+ .rev()
+ .filter_map(|line| match line {
+ LogItem::State(Ok(_)) => Some(true),
+ LogItem::State(Err(_)) => Some(false),
+ _ => None,
+ })
+ .next()
+ }
+
+ pub fn iter(&self) -> impl Iterator<Item = &LogItem> {
+ self.0.iter()
+ }
}
pub fn parser<'a>() -> PomParser<'a, u8, LogItem> {