use std::fs;
use std::path::Path;
use serde_json::{Error, Value};
use crate::report::ReportError;
use crate::runner::HurlResult;
impl From<Error> for ReportError {
fn from(value: Error) -> Self {
ReportError::from_string(&value.to_string())
}
}
pub fn parse_json_report(filename: &Path) -> Result<Vec<Value>, ReportError> {
if !filename.exists() {
return Ok(vec![]);
}
let s = fs::read_to_string(filename)
.map_err(|e| ReportError::from_io_error(&e, filename, "Issue reading JSON report"))?;
if let Ok(Some(Value::Array(values))) = serde_json::from_str(&s)
&& values.iter().all(HurlResult::is_deserializable)
{
return Ok(values);
}
Ok(vec![])
}