use clap::Parser;
use tokenburn_web::{ServerOptions, serve};
#[derive(Debug, Parser)]
#[command(name = "tokenburn-web", version, about)]
struct Args {
#[arg(long, env = "HOST", default_value = "127.0.0.1")]
host: String,
#[arg(long, short, env = "PORT", default_value_t = 3000)]
port: u16,
#[arg(long)]
no_open: bool,
#[arg(long, value_name = "NAME", value_parser = parse_theme)]
theme: Option<usize>,
#[arg(long)]
list_themes: bool,
}
fn parse_theme(s: &str) -> Result<usize, String> {
tokenburn_core::find_theme(s).ok_or_else(|| format!("unknown theme '{s}' (try --list-themes)"))
}
#[tokio::main]
async fn main() -> std::io::Result<()> {
let args = Args::parse();
if args.list_themes {
for name in tokenburn_core::THEME_NAMES {
println!("{name}");
}
return Ok(());
}
if let Some(i) = args.theme {
let _ = tokenburn_core::settings::save_theme(i);
}
serve(ServerOptions {
host: args.host,
port: args.port,
open_browser: !args.no_open,
})
.await
}