mod auth; mod cases; mod collections; mod entities; use std::sync::Arc; use axum::routing::get; use axum::routing::Router; use clap::Parser; use dotenv::dotenv; use mongodb::options::ClientOptions; use mongodb::Client; use crate::entities::Params; use crate::entities::State; #[tokio::main] async fn main() { dotenv().ok(); tracing_subscriber::fmt::init(); let args = Params::parse(); tracing::debug!("Connecting to mongo..."); let mongo_options = ClientOptions::parse(&args.mongo_addr).await.unwrap(); let client = Client::with_options(mongo_options).unwrap(); let db = client.database("helyxTestDatabase"); let state = Arc::new(State { db }); let app = Router::new() .route("/", get(index)) .merge(collections::router( state.clone(), args.ci_usr.clone(), args.ci_pwd.clone(), args.ci_role.clone(), )) .merge(cases::router( state.clone(), args.ci_usr.clone(), args.ci_pwd.clone(), args.ci_role.clone(), )); tracing::info!(args.addr, "Server listening in"); axum::Server::bind(&args.addr.parse().unwrap()) .serve(app.into_make_service()) .await .unwrap(); } async fn index() -> String { format!("Hellow") }