#[cfg(test)]
mod tests;
use crate::tool::ToolError;
use std::fmt::Write as _;
#[must_use]
pub fn format_failure_evidence(context: &str, error: &ToolError) -> String {
let mut message = format!("{context}: {error}");
if let Some(evidence) = error.evidence() {
let _ = write!(
message,
"\nstatus: {:?}\nstdout:\n{}\nstderr:\n{}",
evidence.status,
String::from_utf8_lossy(&evidence.stdout).trim_end(),
String::from_utf8_lossy(&evidence.stderr).trim_end(),
);
}
if let Some(cleanup) = error
.execution_error()
.and_then(|failure| failure.cleanup.as_ref())
{
let _ = write!(message, "\ncleanup: {cleanup}");
}
message
}