mod auth; mod config; mod markdown; mod models; mod server; mod wiki; use anyhow::Result; use clap::Parser; use config::Config; use server::Server; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[derive(Parser)] #[command(author, version, about, long_about = None)] struct Cli { #[arg(short, long, default_value = "config.toml")] config: String, #[arg(short, long, default_value = "3000")] port: u16, #[arg(short, long)] wiki_path: Option, #[arg(long, help = "Generate static HTML files instead of running the server")] generate: bool, #[arg(long, default_value = "output", help = "Output directory for generated HTML files")] output_dir: String, } #[tokio::main] async fn main() -> Result<()> { tracing_subscriber::registry() .with( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| "obswiki=debug,tower_http=debug".into()), ) .with(tracing_subscriber::fmt::layer()) .init(); let cli = Cli::parse(); let config = Config::load(&cli.config).await?; let wiki_path = cli.wiki_path.unwrap_or_else(|| "wiki".to_string()); if cli.generate { let generator = wiki::StaticGenerator::new(wiki_path, cli.output_dir); generator.generate().await?; println!("Static HTML files generated successfully!"); } else { let server = Server::new(config, wiki_path, cli.port).await?; server.run().await?; } Ok(()) }