Files
obswiki/src/main.rs
2025-08-10 10:31:10 -04:00

59 lines
1.5 KiB
Rust

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<String>,
#[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(())
}