use crate::executor::ExecutionResult;
pub struct StatsFormatter {
show_time: bool,
show_count: bool,
}
impl StatsFormatter {
pub fn new(show_time: bool, show_count: bool) -> Self {
Self {
show_time,
show_count,
}
}
pub fn format(&self, result: &ExecutionResult) -> String {
let mut parts = Vec::new();
if self.show_time && result.stats.execution_time_ms > 0 {
parts.push(format!(
"Execution time: {}ms",
result.stats.execution_time_ms
));
}
if self.show_count
&& let Some(count) = result.stats.documents_affected
{
parts.push(format!("Documents affected: {}", count));
}
if parts.is_empty() {
String::new()
} else {
parts.join(", ")
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::executor::{ExecutionResult, ExecutionStats, ResultData};
#[test]
fn test_stats_formatter() {
let formatter = StatsFormatter::new(true, true);
let result = ExecutionResult {
success: true,
data: ResultData::None,
stats: ExecutionStats {
execution_time_ms: 150,
documents_returned: 0,
documents_affected: Some(5),
},
error: None,
};
let stats = formatter.format(&result);
assert!(stats.contains("150ms"));
assert!(stats.contains("Documents affected: 5"));
}
}