#![allow(dead_code)]
#[cfg(all(
feature = "process-control",
feature = "stats",
feature = "limits",
feature = "mock",
feature = "tracing",
feature = "record"
))]
mod guides {
#[doc(hidden)]
#[doc = include_str!("../README.md")]
mod readme {}
#[doc(hidden)]
#[doc = include_str!("../docs/README.md")]
mod docs_readme {}
#[doc(hidden)]
#[doc = include_str!("../docs/commands.md")]
mod docs_commands {}
#[doc(hidden)]
#[doc = include_str!("../docs/cookbook.md")]
mod docs_cookbook {}
#[doc(hidden)]
#[doc = include_str!("../docs/streaming.md")]
mod docs_streaming {}
#[doc(hidden)]
#[doc = include_str!("../docs/pipelines.md")]
mod docs_pipelines {}
#[doc(hidden)]
#[doc = include_str!("../docs/supervision.md")]
mod docs_supervision {}
#[doc(hidden)]
#[doc = include_str!("../docs/testing.md")]
mod docs_testing {}
#[doc(hidden)]
#[doc = include_str!("../docs/timeouts-and-cancellation.md")]
mod docs_timeouts_and_cancellation {}
#[doc(hidden)]
#[doc = include_str!("../docs/errors.md")]
mod docs_errors {}
#[doc(hidden)]
#[doc = include_str!("../docs/process-groups.md")]
mod docs_process_groups {}
#[doc(hidden)]
#[doc = include_str!("../docs/platform-support.md")]
mod docs_platform_support {}
#[doc(hidden)]
#[doc = include_str!("../docs/containers.md")]
mod docs_containers {}
#[doc(hidden)]
#[doc = include_str!("../docs/upgrading.md")]
mod docs_upgrading {}
#[doc(hidden)]
#[doc = include_str!("../docs/whats-next.md")]
mod docs_whats_next {}
#[doc(hidden)]
#[doc = include_str!("../docs/dotnet-version.md")]
mod docs_dotnet_version {}
#[doc(hidden)]
#[doc = include_str!("../docs/python-wrapper.md")]
mod docs_python_wrapper {}
}
#[cfg(test)]
mod tests {
use std::collections::BTreeSet;
use std::fs;
use std::path::Path;
const NON_CHAPTERS: &[&str] = &["SUMMARY.md"];
fn narrative_guides(docs_dir: &Path) -> BTreeSet<String> {
fs::read_dir(docs_dir)
.expect("read docs directory")
.map(|entry| entry.expect("read docs directory entry").file_name())
.filter_map(|name| name.into_string().ok())
.filter(|name| name.ends_with(".md") && !NON_CHAPTERS.contains(&name.as_str()))
.collect()
}
#[test]
fn every_narrative_guide_is_registered_for_doctests() {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
let source = fs::read_to_string(manifest_dir.join("src/doc_examples.rs"))
.expect("read doc_examples harness source");
let included_guides = source
.lines()
.filter_map(|line| {
line.trim()
.strip_prefix(r#"#[doc = include_str!("../docs/"#)
.and_then(|path| path.strip_suffix(r#"")]"#))
.map(str::to_owned)
})
.collect::<BTreeSet<_>>();
let guide_files = narrative_guides(&manifest_dir.join("docs"));
assert_eq!(
included_guides, guide_files,
"docs/*.md and doc_examples.rs registrations diverged; add each new narrative guide with #[doc = include_str!(...)] (or list a known non-chapter in NON_CHAPTERS)"
);
let registered_modules = source
.lines()
.filter_map(|line| {
line.trim()
.strip_prefix("mod docs_")
.and_then(|name| name.strip_suffix(" {}"))
.map(str::to_owned)
})
.collect::<BTreeSet<_>>();
let expected_modules = guide_files
.iter()
.map(|file| {
file.trim_end_matches(".md")
.replace('-', "_")
.to_lowercase()
})
.collect::<BTreeSet<_>>();
assert_eq!(
registered_modules, expected_modules,
"every narrative docs/*.md include must have a matching mod docs_* declaration"
);
}
}