#[cfg(test)]
#[path = "group_tests.rs"]
mod group_tests;
use crate::record::LogRecord;
use crate::traits::LogParser;
#[derive(Debug)]
pub struct ParserGroup {
pub name: String,
pub parsers: Vec<Box<dyn LogParser>>,
}
impl ParserGroup {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
parsers: Vec::new(),
}
}
pub fn add_parser(&mut self, parser: Box<dyn LogParser>) {
self.parsers.push(parser);
}
pub fn parse(&self, raw: &str, source: &str, loader_id: &str, id: u64) -> Option<LogRecord> {
for parser in &self.parsers {
if let Some(record) = parser.parse(raw, source, loader_id, id) {
return Some(record);
}
}
None
}
}