diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-11-13 18:03:19 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-11-13 18:33:51 +0100 |
commit | 51cc273b8e6dcb0b52f9e900e579fa685b271e71 (patch) | |
tree | 7eb615ff59f665bb958f9492a7bcf94ac9116c5b /src/log | |
parent | ac134aba4b7928c6593f8896809067057dfb4869 (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.rs | 45 |
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> { |