use std::path::{Path, PathBuf};
#[derive(Debug, Clone)]
pub struct SkippedSkill {
pub(crate) path: PathBuf,
pub(crate) reason: String,
}
#[derive(Debug, Default)]
pub struct Diagnostics {
warnings: Vec<String>,
skipped: Vec<SkippedSkill>,
}
impl Diagnostics {
pub(crate) fn new(_verbose: bool) -> Self {
Self {
warnings: Vec::new(),
skipped: Vec::new(),
}
}
pub(crate) fn warn(&mut self, message: impl Into<String>) {
let message = message.into();
eprintln!("Warning: {message}");
self.warnings.push(message);
}
pub(crate) fn note(&self, message: impl Into<String>) {
eprintln!("{}", message.into());
}
pub(crate) fn warn_skipped(&mut self, path: &Path, reason: impl Into<String>) {
let reason = reason.into();
self.warn(format!("{} - {reason}", path.display()));
self.skipped.push(SkippedSkill {
path: path.to_path_buf(),
reason,
});
}
pub(crate) fn print_skipped_summary(&self) {
if self.skipped.is_empty() {
return;
}
eprintln!("Skipped {} skills due to errors:", self.skipped.len());
for skipped in &self.skipped {
eprintln!(" - {}: {}", skipped.path.display(), skipped.reason);
}
}
pub(crate) fn print_warning_summary(&self) {
if self.warnings.is_empty() {
return;
}
eprintln!("Completed with {} warning(s).", self.warnings.len());
}
}