use crate::session::Fault;
use crate::tool::ToolResult;
use serde_json::json;
pub fn fault_from_error(err: &anyhow::Error) -> Fault {
let lowered = err.to_string().to_ascii_lowercase();
if lowered.contains("no session")
|| lowered.contains("not found")
|| lowered.contains("no such file")
{
Fault::NoMatch
} else {
Fault::BackendError {
reason: err.to_string(),
}
}
}
pub fn fault_result(fault: Fault, output: impl Into<String>) -> ToolResult {
ToolResult::error(output)
.with_metadata("fault_code", json!(fault.code()))
.with_metadata("fault_detail", json!(fault.to_string()))
}