Skip to main content

rflog_parser/
lib.rs

1use anyhow::{anyhow, Context, Result};
2use info_line::RFLogInfoLine;
3use log::Log;
4
5pub mod info_line;
6pub mod log;
7
8#[derive(Debug, Clone)]
9pub struct RFLogFile {
10  pub info_line: RFLogInfoLine,
11  pub logs: Vec<Log>
12}
13
14pub fn parse(body: String) -> Result<RFLogFile> {
15  let mut lines = body.lines();
16
17  let info_line = lines
18    .next()
19    .context(anyhow!("Invalid format: Unable to get RFLogInfoLine"))?;
20
21  let mut logs = Vec::new();
22
23  for (line, log) in lines.enumerate() {
24    logs.push(log::parse(line, log)?);
25  }
26
27  Ok(
28    RFLogFile {
29      info_line: info_line::parse(info_line)?,
30      logs
31    }
32  )
33}