tramex_tools/interface/parser/
parser_basic.rs1use super::ParsingError;
3use super::hex_extractor::extract_binary_from_lines;
4use super::{LayerParser, ParsedHeader};
5use crate::data::{AdditionalInfos, Trace};
6use crate::interface::association::TraceRelation;
7use crate::interface::layer::Layer;
8
9pub struct BasicParser;
12
13impl BasicParser {
14 pub fn parse_with_layer(lines: &[String], layer: Layer) -> Result<Trace, ParsingError> {
18 if lines.is_empty() {
19 return Err(ParsingError::new(format!("{:?} parser received empty lines", layer), 0));
20 }
21
22 let text = lines.to_vec();
23 let binary = extract_binary_from_lines(lines);
24
25 let timestamp = if let Some(first_line) = lines.first() {
27 match chrono::NaiveDateTime::parse_from_str(first_line, "%Y-%m-%d %H:%M:%S%.3f") {
28 Ok(timestamp) => timestamp.and_utc().timestamp(),
29 Err(_) => super::parse_timestamp(first_line).unwrap_or_default(),
30 }
31 } else {
32 0
33 };
34
35 let trace = Trace {
36 timestamp,
37 layer,
38 additional_infos: AdditionalInfos::None,
39 text: Some(text),
40 binary,
41 relation: TraceRelation::default(),
42 };
43 Ok(trace)
44 }
45}
46
47impl LayerParser for BasicParser {
48 fn parse_layer(_header: &ParsedHeader, _data_lines: &[String]) -> Result<AdditionalInfos, ParsingError> {
50 Ok(AdditionalInfos::None)
51 }
52}