#[cfg(test)]
#[path = "processor_tests.rs"]
mod processor_tests;
use crate::record::LogRecord;
use crate::traits::{LogProcessor, Result};
#[derive(Debug)]
pub struct NoOpProcessor {
name: String,
}
impl NoOpProcessor {
pub fn new(name: impl Into<String>) -> Self {
Self { name: name.into() }
}
}
impl LogProcessor for NoOpProcessor {
fn process(&self, _records: &[LogRecord]) -> Result<()> {
Ok(())
}
fn name(&self) -> &str {
&self.name
}
}
#[derive(Debug)]
pub struct CountingProcessor {
name: String,
}
impl CountingProcessor {
pub fn new(name: impl Into<String>) -> Self {
Self { name: name.into() }
}
pub fn count_by_level(
records: &[LogRecord],
) -> std::collections::HashMap<Option<crate::record::LogLevel>, usize> {
let mut counts = std::collections::HashMap::new();
for record in records {
*counts.entry(record.level).or_insert(0) += 1;
}
counts
}
}
impl LogProcessor for CountingProcessor {
fn process(&self, _records: &[LogRecord]) -> Result<()> {
Ok(())
}
fn name(&self) -> &str {
&self.name
}
}