use std::path::Path;
use crate::{
testing::{plan::TestPlan, result::TestResult},
vcs::ChangedFile,
};
pub mod console;
pub mod json;
pub trait Reporter {
fn note(&mut self, message: &str);
fn tip(&mut self, message: &str);
fn error(&mut self, message: &str);
fn changed_files(&mut self, changed_files: &[ChangedFile], workspace_root: &Path);
fn test_start(&mut self, crate_name: &str, test_number: usize, total_tests: usize);
fn test_result(&mut self, crate_name: &str, success: bool, duration_ms: u64);
fn test_summary(&mut self, passed: usize, failed: usize, duration_secs: f64);
fn plan_summary(&mut self, test_plan: &TestPlan);
fn test_failures(&mut self, failures: &[TestResult]);
fn test_failure_details(&mut self, crate_name: &str, output: &str);
fn no_tests(&mut self);
fn dry_run(&mut self);
fn flush(&mut self) -> std::io::Result<()>;
}
pub fn pluralize(count: usize, singular: &str, plural: &str) -> String {
if count == 1 {
singular.to_string()
} else {
plural.to_string()
}
}