53 lines
1.2 KiB
Rust
53 lines
1.2 KiB
Rust
mod auth;
|
|
mod config;
|
|
mod db;
|
|
mod error;
|
|
mod models;
|
|
mod routes;
|
|
mod s3;
|
|
mod schema;
|
|
mod state;
|
|
|
|
use std::net::SocketAddr;
|
|
|
|
use tokio::net::TcpListener;
|
|
use tower::make::Shared;
|
|
use tracing_subscriber::EnvFilter;
|
|
|
|
use crate::auth::jwt::JwtService;
|
|
use crate::config::AppConfig;
|
|
use crate::s3::build_client;
|
|
use crate::state::AppState;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
dotenv::dotenv().ok();
|
|
init_tracing();
|
|
|
|
let config = AppConfig::from_env()?;
|
|
let pool = db::init_pool(&config.database_url)?;
|
|
let s3_client = build_client(&config).await?;
|
|
let jwt = JwtService::from_config(&config)?;
|
|
|
|
let state = AppState::new(pool, config, s3_client, jwt);
|
|
|
|
let router = routes::create_router(state.clone());
|
|
|
|
let addr: SocketAddr =
|
|
format!("{}:{}", state.config.server_host, state.config.server_port).parse()?;
|
|
let listener = TcpListener::bind(addr).await?;
|
|
tracing::info!("listening on {}", addr);
|
|
|
|
axum::serve(listener, Shared::new(router)).await?;
|
|
Ok(())
|
|
}
|
|
|
|
fn init_tracing() {
|
|
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(filter)
|
|
.with_target(false)
|
|
.compact()
|
|
.init();
|
|
}
|