use std::sync::Arc;
use anyhow::{anyhow, Context, Error, Result};
use log::{error, info};
mod common;
mod config;
mod render;
mod routes;
#[tokio::main]
async fn main() -> Result<()> {
let config = config::load()?;
info!("Configuration loaded");
let engine = Arc::new(render::Engine::new(config));
info!("Rendering Engine loaded");
let router = routes::router(engine.clone());
info!("Route handlers loaded");
let addr = format!("{}:{}", engine.app.server.bind, engine.app.server.port);
let listener = tokio::net::TcpListener::bind(&addr).await?;
info!("Creating server on: {}", &addr);
let server = axum::serve(listener, router);
info!("Running server on: {}", &addr);
if let Err(err) = server.await {
error!("Unhandled server error: {}", err)
}
Ok(())
}