#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UnclassifiedTracking {
CountOnly,
TrackLines,
CaptureData,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum UnclassifiedReason {
OrphanContinuation,
UnknownMessageFormat,
TruncatedField,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UnclassifiedLine {
pub line_number: u64,
pub reason: UnclassifiedReason,
pub data: Option<String>,
}
#[derive(Debug, Clone, Default)]
pub struct ParseStats {
pub lines_processed: u64,
pub lines_unclassified: u64,
pub lines_in_entries: u64,
pub lines_empty_orphan: u64,
pub lines_split: u64,
pub unclassified_lines: Vec<UnclassifiedLine>,
}
impl ParseStats {
pub fn unaccounted_lines(&self) -> u64 {
let expected = self.lines_in_entries + self.lines_empty_orphan;
let actual = self.lines_processed + self.lines_split;
actual.saturating_sub(expected)
}
}