use crate::generate::generators;
use crate::OpSpec;
use serde::{Deserialize, Serialize};
use std::collections::HashSet;
use std::fs;
use std::io;
use std::path::Path;
use super::util::*;
use super::{Golden};
#[inline]
pub fn load_goldens(root: &Path) -> io::Result<Vec<Golden>> {
let mut out = Vec::new();
if !root.exists() {
return Ok(out);
}
for entry in walkdir::WalkDir::new(root) {
let entry = entry.map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
let path = entry.path();
if path.extension().and_then(|e| e.to_str()) != Some("json") {
continue;
}
let text = fs::read_to_string(path)?;
let golden: Golden = serde_json::from_str(&text).map_err(|e| {
io::Error::new(
io::ErrorKind::InvalidData,
format!("invalid golden JSON at {}: {}", path.display(), e),
)
})?;
out.push(golden);
}
out.sort_by(|a, b| {
a.op_id
.cmp(&b.op_id)
.then(a.spec_version.cmp(&b.spec_version))
});
Ok(out)
}