/// Print the error message and exit with code 2. /// JSON deserialization errors produce a friendlier message matching Python's /// JSONDecodeError handling. pub fn handle_error(e: anyhow::Error) -> ! { if is_json_error(&*e) { eprintln!( "Unexpected response returned. Please check the configuration or the server's operational status." ); } else { eprintln!("Error: {}", e); } std::process::exit(2); } /// Walk the error source chain to detect `serde_json` parse errors. fn is_json_error(e: &(dyn std::error::Error + 'static)) -> bool { let mut source: Option<&(dyn std::error::Error + 'static)> = Some(e); while let Some(err) = source { if err.downcast_ref::().is_some() { return true; } source = err.source(); } false }