Julio Biason
2 years ago
3 changed files with 1265 additions and 12 deletions
@ -1,25 +1,79 @@ |
|||||||
mod headers; |
mod headers; |
||||||
|
|
||||||
use axum::routing::get; |
use std::sync::Arc; |
||||||
use axum::routing::Router; |
|
||||||
use axum::TypedHeader; |
|
||||||
use headers::cipwd::CiPwd; |
use headers::cipwd::CiPwd; |
||||||
use headers::cirole::CiRole; |
use headers::cirole::CiRole; |
||||||
use headers::ciusr::CiUsr; |
use headers::ciusr::CiUsr; |
||||||
|
|
||||||
|
use axum::routing::get; |
||||||
|
use axum::routing::Router; |
||||||
|
use axum::TypedHeader; |
||||||
|
use clap::Parser; |
||||||
|
use dotenv::dotenv; |
||||||
|
use mongodb::options::ClientOptions; |
||||||
|
use mongodb::Client; |
||||||
|
use mongodb::Database; |
||||||
|
use tracing_subscriber; |
||||||
|
|
||||||
|
#[derive(Parser)] |
||||||
|
struct Params { |
||||||
|
#[clap(env = "SRV_ADDR", default_value = "0.0.0.0:3000")] |
||||||
|
addr: String, |
||||||
|
|
||||||
|
#[clap(short, long, env = "MONGO_URI")] |
||||||
|
mongo_addr: String, |
||||||
|
} |
||||||
|
|
||||||
|
struct State { |
||||||
|
db: Database, |
||||||
|
collections: Vec<String>, |
||||||
|
} |
||||||
|
|
||||||
#[tokio::main] |
#[tokio::main] |
||||||
async fn main() { |
async fn main() { |
||||||
let app = Router::new().route("/", get(index)); |
dotenv().ok(); |
||||||
axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()) |
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 collections = db.list_collection_names(None).await.unwrap(); |
||||||
|
tracing::debug!("Collections = {:?}", &collections); |
||||||
|
|
||||||
|
let state = Arc::new(State { db, collections }); |
||||||
|
|
||||||
|
let app = Router::new().route("/", get(index)).route( |
||||||
|
"/collections", |
||||||
|
get({ |
||||||
|
let shared_state = Arc::clone(&state); |
||||||
|
move |usr, pwd, role| get_collections(usr, pwd, role, Arc::clone(&shared_state)) |
||||||
|
}), |
||||||
|
); |
||||||
|
|
||||||
|
tracing::info!(args.addr, "Server listening in"); |
||||||
|
axum::Server::bind(&args.addr.parse().unwrap()) |
||||||
.serve(app.into_make_service()) |
.serve(app.into_make_service()) |
||||||
.await |
.await |
||||||
.unwrap(); |
.unwrap(); |
||||||
} |
} |
||||||
|
|
||||||
async fn index( |
async fn index( |
||||||
|
TypedHeader(usr): TypedHeader<CiUsr>, |
||||||
|
TypedHeader(_pwd): TypedHeader<CiPwd>, |
||||||
|
TypedHeader(_role): TypedHeader<CiRole>, |
||||||
|
) -> String { |
||||||
|
format!("Hellow {}", usr) |
||||||
|
} |
||||||
|
|
||||||
|
async fn get_collections( |
||||||
TypedHeader(usr): TypedHeader<CiUsr>, |
TypedHeader(usr): TypedHeader<CiUsr>, |
||||||
TypedHeader(pwd): TypedHeader<CiPwd>, |
TypedHeader(pwd): TypedHeader<CiPwd>, |
||||||
TypedHeader(role): TypedHeader<CiRole>, |
TypedHeader(role): TypedHeader<CiRole>, |
||||||
|
state: Arc<State>, |
||||||
) -> String { |
) -> String { |
||||||
format!("Hellow {}", usr) |
format!("Collections") |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue