elnafo-radio/src/main.rs

55 lines
1.3 KiB
Rust
Raw Normal View History

2024-09-26 01:04:50 +05:00
pub mod api;
pub mod config;
use axum::{http::Uri, response::IntoResponse, routing::get, Router};
use std::net::SocketAddr;
use std::sync::Arc;
use tower_http::trace::{self, TraceLayer};
use tracing::Level;
use crate::config::Config;
pub struct Context {
pub config: Config,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_target(false)
.compact()
.init();
let config = match Config::open(Config::data_dir()?.join("config.toml").as_path()) {
Ok(config) => {
println!("Config loaded: {:?}", config);
config
}
Err(err) => {
eprintln!("{}", err);
Config::new()
}
};
let state = Arc::new(Context {
config: config.clone(),
});
let app = Router::new().nest("/api", api::routes(state)).layer(
TraceLayer::new_for_http()
.make_span_with(trace::DefaultMakeSpan::new().level(Level::INFO))
.on_response(trace::DefaultOnResponse::new().level(Level::INFO)),
);
let address: SocketAddr =
format!("{}:{}", config.server.address, config.server.port).parse()?;
let lister = tokio::net::TcpListener::bind(&address).await?;
println!("Listening on {}", address);
axum::serve(lister, app.into_make_service()).await?;
Ok(())
}