Parent [>]
1mod cli;
2
3use clap::Parser;
4use temp_name::config;
5use temp_name::theme::{BASE_CSS, MARKDOWN_CSS};
6use temp_name::{error, routes};
7
8#[tokio::main]
9async fn main() -> error::Result<()> {
10    let args = cli::Args::parse();
11
12    config::set_hostname(args.hostname);
13    config::set_ssh_prefix(args.ssh_prefix);
14    config::set_base_url(args.base_url);
15
16    let favicon_data = args.favicon.map_or_else(
17        || include_bytes!("../static/favicon.svg").to_vec(),
18        |path| std::fs::read(&path).unwrap_or_default(),
19    );
20    config::set_favicon(favicon_data);
21
22    let theme_vars = match args.theme_file {
23        Some(path) => std::fs::read_to_string(path)?,
24        None => args.theme.css().to_owned(),
25    };
26    let css = format!("{theme_vars}\n{BASE_CSS}\n{MARKDOWN_CSS}");
27
28    let state = routes::AppState {
29        root: args.root,
30        css,
31    };
32    let router = routes::router(state);
33    let addr = format!("{}:{}", args.bind, args.port);
34
35    let socket = tokio::net::TcpListener::bind(&addr).await?;
36    axum::serve(socket, router).await?;
37
38    Ok(())
39}