implement basic configuration

This commit is contained in:
Ilion Beyst 2022-02-20 23:06:05 +01:00
parent 8f29332048
commit 9c90e79575
3 changed files with 18 additions and 4 deletions

View file

@ -24,6 +24,7 @@ base64 = "0.13.0"
zip = "0.5"
toml = "0.5"
planetwars-matchrunner = { path = "../planetwars-matchrunner" }
config = { version = "0.12", features = ["toml"] }
# TODO: remove me
shlex = "1.1"

View file

@ -0,0 +1 @@
database_url = "postgresql://planetwars:planetwars@localhost/planetwars"

View file

@ -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<DieselConnectionManager<PgConnection>>;
pub async fn api() -> Router {
let database_url = "postgresql://planetwars:planetwars@localhost/planetwars";
let manager = DieselConnectionManager::<PgConnection>::new(database_url);
pub async fn api(configuration: Configuration) -> Router {
let manager = DieselConnectionManager::<PgConnection>::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<PgConnection>>);