From 9c90e79575afb3ab2574f1d7e0fc79d7fae90458 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Sun, 20 Feb 2022 23:06:05 +0100 Subject: implement basic configuration --- planetwars-server/src/lib.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'planetwars-server/src') diff --git a/planetwars-server/src/lib.rs b/planetwars-server/src/lib.rs index 94f2965..60b68ed 100644 --- a/planetwars-server/src/lib.rs +++ b/planetwars-server/src/lib.rs @@ -14,6 +14,7 @@ use axum; use bb8::PooledConnection; use bb8_diesel::{self, DieselConnectionManager}; use diesel::PgConnection; +use serde::Deserialize; use axum::{ async_trait, @@ -30,9 +31,8 @@ const MAPS_DIR: &str = "./data/maps"; type ConnectionPool = bb8::Pool>; -pub async fn api() -> Router { - let database_url = "postgresql://planetwars:planetwars@localhost/planetwars"; - let manager = DieselConnectionManager::::new(database_url); +pub async fn api(configuration: Configuration) -> Router { + let manager = DieselConnectionManager::::new(configuration.database_url); let pool = bb8::Pool::builder().build(manager).await.unwrap(); let api = Router::new() @@ -64,10 +64,22 @@ pub async fn api() -> Router { } pub async fn app() -> Router { - let api = api().await; + let configuration = config::Config::builder() + .add_source(config::File::with_name("configuration.toml")) + .add_source(config::Environment::with_prefix("PLANETWARS")) + .build() + .unwrap() + .try_deserialize() + .unwrap(); + let api = api(configuration).await; Router::new().nest("/api", api) } +#[derive(Deserialize)] +pub struct Configuration { + pub database_url: String, +} + // we can also write a custom extractor that grabs a connection from the pool // which setup is appropriate depends on your application pub struct DatabaseConnection(PooledConnection<'static, DieselConnectionManager>); -- cgit v1.2.3