1use std::ffi::OsString;
2
3use anyhow::{Result, ensure};
4
5#[derive(clap::Args, Debug)]
6pub struct DocArgs {
7 #[arg(trailing_var_arg = true, allow_hyphen_values = true)]
9 cargo_args: Vec<OsString>,
10}
11
12impl DocArgs {
13 pub fn run(self, _spec: &mut clap::Command) -> Result<()> {
14 let manifest = env!("CARGO_MANIFEST_DIR");
15 let katex_hdr = format!("{manifest}/docs/assets/rustdoc-include-katex-header.html");
16 let status = std::process::Command::new(env!("CARGO"))
17 .current_dir(manifest)
18 .arg("doc")
19 .args(&self.cargo_args)
20 .env("RUSTDOCFLAGS", format!("--html-in-header {katex_hdr}"))
21 .status()?;
22 ensure!(status.success(), "cargo doc exited with {status}");
23 Ok(())
24 }
25}