pub mod cli;
pub mod model;
pub mod render;
pub mod rustdoc_json;
use anyhow::{Context, Result};
use cli::BriefArgs;
use model::CrateModel;
pub fn run_pipeline(args: &BriefArgs) -> Result<String> {
let json_path = rustdoc_json::generate_rustdoc_json(
&args.crate_name,
&args.toolchain,
args.manifest_path.as_deref(),
true, )
.with_context(|| {
format!(
"Failed to generate rustdoc JSON for crate '{}'",
args.crate_name
)
})?;
let krate = rustdoc_json::parse_rustdoc_json(&json_path)
.with_context(|| format!("Failed to parse rustdoc JSON at '{}'", json_path.display()))?;
let model = CrateModel::from_crate(krate);
let observer_crate = args.at_package.as_deref().unwrap_or(&args.crate_name);
let same_crate =
observer_crate == args.crate_name || observer_crate.replace('-', "_") == model.crate_name();
let output = render::render_module_api(
&model,
args.module_path.as_deref(),
args,
args.at_mod.as_deref(),
same_crate,
);
Ok(output)
}