59 lines
1.5 KiB
Rust
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(())
|
|
}
|