use std::path::Path;
use serde::Serialize;
pub fn max_path_width<'a>(paths: impl Iterator<Item = &'a Path>, min: usize) -> usize {
paths
.map(|p| p.display().to_string().len())
.max()
.unwrap_or(min)
.max(min)
}
pub fn separator(width: usize) -> String {
"\u{2500}".repeat(width)
}
pub fn print_json_stdout(value: &impl Serialize) -> Result<(), Box<dyn std::error::Error>> {
println!("{}", serde_json::to_string_pretty(value)?);
Ok(())
}
pub fn output_results<T>(
results: &mut Vec<T>,
top: usize,
json: bool,
print_json_fn: impl FnOnce(&[T]) -> Result<(), Box<dyn std::error::Error>>,
print_report_fn: impl FnOnce(&[T]),
) -> Result<(), Box<dyn std::error::Error>> {
results.truncate(top);
if json {
print_json_fn(results)
} else {
print_report_fn(results);
Ok(())
}
}
#[cfg(test)]
#[path = "report_helpers_test.rs"]
mod tests;