use std::io::Write;
use crate::standard_json::output::error::Error;
pub trait ErrorHandler {
fn errors(&self) -> Vec<&Error>;
fn take_warnings(&mut self) -> Vec<Error>;
fn has_errors(&self) -> bool {
!self.errors().is_empty()
}
fn check_errors(&self) -> anyhow::Result<()> {
if !self.has_errors() {
return Ok(());
}
anyhow::bail!(
"{}",
self.errors()
.iter()
.map(|error| error.to_string())
.collect::<Vec<String>>()
.join("\n")
);
}
fn exit_on_error(&self) {
if !self.has_errors() {
return;
}
std::io::stderr()
.write_all(
self.errors()
.iter()
.map(|error| error.to_string())
.collect::<Vec<String>>()
.join("\n")
.as_bytes(),
)
.expect("Stderr writing error");
std::process::exit(revive_common::EXIT_CODE_FAILURE);
}
fn take_and_write_warnings(&mut self) {
let warnings = self.take_warnings();
if warnings.is_empty() {
return;
}
writeln!(
std::io::stderr(),
"{}",
warnings
.into_iter()
.map(|error| error.to_string())
.collect::<Vec<String>>()
.join("\n")
)
.expect("Stderr writing error");
}
}