use std::path::PathBuf;
use anyhow::Result;
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(
name = "docgen",
version,
about = "Static documentation-site generator"
)]
struct Cli {
#[command(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
Build {
#[arg(default_value = ".")]
root: PathBuf,
},
Init {
#[arg(default_value = ".")]
dir: PathBuf,
#[arg(long, default_value_t = false)]
force: bool,
},
Dev {
#[arg(default_value = ".")]
root: PathBuf,
#[arg(long, default_value_t = 4321)]
port: u16,
#[arg(long, default_value_t = false)]
open: bool,
},
Plantuml {
#[arg(long, default_value_t = 8080)]
port: u16,
},
}
fn main() -> Result<()> {
let cli = Cli::parse();
match cli.command {
Command::Build { root } => {
let outcome = docgen_build::build(&root)?;
println!(
"Built {} page(s) -> {}",
outcome.page_count,
outcome.out_dir.display()
);
Ok(())
}
Command::Init { dir, force } => {
docgen_init::scaffold(&docgen_init::InitOptions {
target: dir.clone(),
force,
})?;
println!("Scaffolded a new docgen site at {}", dir.display());
println!("Next: cd {} && docgen dev", dir.display());
Ok(())
}
Command::Dev { root, port, open } => docgen_server::serve(docgen_server::DevOptions {
project_root: root,
port,
open,
}),
Command::Plantuml { port } => docgen_plantuml::run_container(port),
}
}