tramex_tools/interface/parser/
parser_basic.rs

1//! Basic parser for simple layers (PHY, RLC, MAC, PDCP, SDAP, etc.)
2use super::ParsingError;
3use super::hex_extractor::extract_binary_from_lines;
4use crate::data::{AdditionalInfos, Trace};
5use crate::interface::association::TraceRelation;
6use crate::interface::layer::Layer;
7
8/// Basic Parser for simple layers (PHY, RLC, MAC, PDCP, SDAP, etc.)
9/// This parser handles single-line logs with no complex structure
10pub struct BasicParser;
11
12impl BasicParser {
13    /// Parse a log with a specific layer type
14    /// # Errors
15    /// Return an error if the parsing fails
16    pub fn parse_with_layer(lines: &[String], layer: Layer) -> Result<Trace, ParsingError> {
17        if lines.is_empty() {
18            return Err(ParsingError::new(format!("{:?} parser received empty lines", layer), 0));
19        }
20
21        let text = lines.to_vec();
22        let binary = extract_binary_from_lines(lines);
23
24        // Parse timestamp from first line
25        let timestamp = if let Some(first_line) = lines.first() {
26            super::parse_timestamp(first_line)?
27        } else {
28            0
29        };
30
31        let trace = Trace {
32            timestamp,
33            layer,
34            additional_infos: AdditionalInfos::None,
35            text: Some(text),
36            binary,
37            relation: TraceRelation::default(),
38        };
39        Ok(trace)
40    }
41}