3 use anyhow::{anyhow, bail, Result};
5 use rustdoc_json_types::{Crate, Id, FORMAT_VERSION};
8 pub(crate) mod item_kind;
24 fn main() -> Result<()> {
25 let path = env::args().nth(1).ok_or_else(|| anyhow!("no path given"))?;
26 let contents = fs::read_to_string(&path)?;
27 let krate: Crate = serde_json::from_str(&contents)?;
28 assert_eq!(krate.format_version, FORMAT_VERSION);
30 let mut validator = validator::Validator::new(&krate);
31 validator.check_crate();
33 if !validator.errs.is_empty() {
34 for err in validator.errs {
36 ErrorKind::NotFound => {
37 let krate_json: Value = serde_json::from_str(&contents)?;
40 json_find::find_selector(&krate_json, &Value::String(err.id.0.clone()));
43 "id must be in crate, or it wouldn't be reported as not found"
46 "{} not in index or paths, but refered to at '{}'",
48 json_find::to_jsonpath(&sel)
50 [sel, ..] => eprintln!(
51 "{} not in index or paths, but refered to at '{}' and more",
53 json_find::to_jsonpath(&sel)
57 ErrorKind::Custom(msg) => eprintln!("{}: {}", err.id.0, msg),
60 bail!("Errors validating json {path}");