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}