(root: &Path, project_name: &str, public_name: &str)
| 75 | for doc in &mut docs { |
| 76 | let order = nav_counts.entry(doc.nav_group.clone()).or_default(); |
| 77 | doc.nav_order = *order; |
| 78 | *order = order.saturating_add(1); |
| 79 | } |
| 80 | validate_generated_docs(&docs)?; |
| 81 | |
| 82 | let json = serde_json::to_string(&docs)?; |
| 83 | let out = format!("pub const DOCS_JSON: &str = {json:?};\n"); |
| 84 | let out_path = PathBuf::from(env::var("OUT_DIR")?).join("generated_docs.rs"); |
| 85 | fs::write(out_path, out)?; |
| 86 | Ok(()) |
| 87 | } |
| 88 | |
| 89 | fn validate_generated_docs(docs: &[DocOut]) -> io::Result<()> { |
| 90 | use std::collections::{BTreeMap, BTreeSet}; |
| 91 | |
| 92 | const DOC_GROUPS: &[&str] = &[ |
| 93 | "Start", |
| 94 | "Author", |
| 95 | "Script", |
| 96 | "Runtime", |
| 97 | "Assets", |
| 98 | "Platforms", |
| 99 | "Ship", |
| 100 | "Reference", |
| 101 | "History", |
| 102 | ]; |
| 103 | |
| 104 | let mut failures = Vec::new(); |
no test coverage detected