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}