tramex_tools/interface/parser/
mod.rs1pub mod parser_rrc;
4
5use crate::data::AdditionalInfos;
6use crate::data::Trace;
7
8use crate::errors::ErrorCode;
9use crate::errors::TramexError;
10use crate::tramex_error;
11use chrono::NaiveTime;
12use chrono::Timelike;
13
14pub struct ParsingError {
16 pub message: String,
18
19 pub line_idx: u64,
21}
22
23impl ParsingError {
24 pub fn new(message: String, line_idx: u64) -> Self {
26 Self { message, line_idx }
27 }
28}
29
30#[inline]
32pub fn parsing_error_to_tramex_error(error: ParsingError, idx: u64) -> TramexError {
33 let index = idx + error.line_idx;
34 tramex_error!(format!("{} (line {})", error.message, index), ErrorCode::FileParsing)
35}
36
37pub trait FileParser {
39 fn parse_additional_infos(line: &[String]) -> Result<AdditionalInfos, ParsingError>;
43
44 fn parse(lines: &[String]) -> Result<Trace, ParsingError>;
48}
49
50#[inline]
52pub fn time_to_milliseconds(time: &NaiveTime) -> i64 {
53 let hours_in_ms = time.hour() as i64 * 3_600_000;
54 let minutes_in_ms = time.minute() as i64 * 60_000;
55 let seconds_in_ms = time.second() as i64 * 1000;
56 let milliseconds = time.nanosecond() as i64 / 1_000_000; hours_in_ms + minutes_in_ms + seconds_in_ms + milliseconds
59}
60
61#[inline]
63pub fn eof_error(line_idx: u64) -> TramexError {
64 tramex_error!(
65 format!("End of file (line {})", line_idx),
66 crate::errors::ErrorCode::EndOfFile
67 )
68}