aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--planetwars-server/Cargo.toml1
-rw-r--r--planetwars-server/configuration.toml1
-rw-r--r--planetwars-server/src/lib.rs20
3 files changed, 18 insertions, 4 deletions
diff --git a/planetwars-server/Cargo.toml b/planetwars-server/Cargo.toml
index 77e8fe9..be34a5f 100644
--- a/planetwars-server/Cargo.toml
+++ b/planetwars-server/Cargo.toml
@@ -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"
diff --git a/planetwars-server/configuration.toml b/planetwars-server/configuration.toml
new file mode 100644
index 0000000..ee7002e
--- /dev/null
+++ b/planetwars-server/configuration.toml
@@ -0,0 +1 @@
+database_url = "postgresql://planetwars:planetwars@localhost/planetwars"
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<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>>);