use anyhow::{Context, Result};
use crate::{
cli::{Action, Options},
config, render,
};
pub fn run(options: Options) -> Result<()> {
let project = config::load(&options)?;
let i18n = project.i18n_config()?;
if let Some(language) = &options.language {
i18n.as_ref().context("no languages registered; configure [package.metadata.textus.i18n] languages before using --lang")?
.require_language(language)?;
}
if options.action == Action::Languages {
if let Some(config) = i18n {
for language in config.languages {
println!("{language}");
}
}
return Ok(());
}
let mut languages = vec![options.language.as_deref()];
if options.action == Action::Check
&& options.language.is_none()
&& let Some(config) = &i18n
{
languages.extend(
config
.languages
.iter()
.map(|language| Some(language.as_str())),
);
}
for language in &languages {
render::build(
&project,
&options,
*language,
options.action == Action::Open,
)?;
}
if options.action == Action::Check {
println!(
"Checked {} documentation variant(s) for {} (rustdoc build only)",
languages.len(),
project.name
);
}
Ok(())
}