From 1a70477fc75760619f3872789321693e0fc6de7a Mon Sep 17 00:00:00 2001
From: Dessalines <dessalines@users.noreply.github.com>
Date: Thu, 8 Apr 2021 07:19:58 -0400
Subject: [PATCH] Better DB default fields. (#1560)

* Better DB default fields.

* Fixing clippy
---
 crates/utils/src/settings/defaults.rs | 13 +++-------
 crates/utils/src/settings/mod.rs      | 29 ++++++++-------------
 crates/utils/src/settings/structs.rs  | 36 ++++++++++++++++++++++++---
 src/main.rs                           |  9 ++-----
 4 files changed, 49 insertions(+), 38 deletions(-)

diff --git a/crates/utils/src/settings/defaults.rs b/crates/utils/src/settings/defaults.rs
index 1ca15d24..3e7b344f 100644
--- a/crates/utils/src/settings/defaults.rs
+++ b/crates/utils/src/settings/defaults.rs
@@ -21,20 +21,15 @@ impl Default for Settings {
   }
 }
 
-pub(in crate::settings) static DEFAULT_DATABASE_USER: &str = "lemmy";
-pub(in crate::settings) static DEFAULT_DATABASE_PORT: i32 = 5432;
-pub(in crate::settings) static DEFAULT_DATABASE_DB: &str = "lemmy";
-pub static DEFAULT_DATABASE_POOL_SIZE: u32 = 5;
-
 impl Default for DatabaseConfig {
   fn default() -> Self {
     Self {
-      user: Some(DEFAULT_DATABASE_USER.to_string()),
+      user: Some("lemmy".to_string()),
       password: "password".into(),
       host: "localhost".into(),
-      port: Some(DEFAULT_DATABASE_PORT),
-      database: Some(DEFAULT_DATABASE_DB.to_string()),
-      pool_size: Some(DEFAULT_DATABASE_POOL_SIZE),
+      port: Some(5432),
+      database: Some("lemmy".to_string()),
+      pool_size: Some(5),
     }
   }
 }
diff --git a/crates/utils/src/settings/mod.rs b/crates/utils/src/settings/mod.rs
index dfdfc593..406bf7de 100644
--- a/crates/utils/src/settings/mod.rs
+++ b/crates/utils/src/settings/mod.rs
@@ -1,16 +1,13 @@
 use crate::{
   location_info,
-  settings::{
-    defaults::{DEFAULT_DATABASE_DB, DEFAULT_DATABASE_PORT, DEFAULT_DATABASE_USER},
-    structs::{
-      CaptchaConfig,
-      DatabaseConfig,
-      EmailConfig,
-      FederationConfig,
-      RateLimitConfig,
-      Settings,
-      SetupConfig,
-    },
+  settings::structs::{
+    CaptchaConfig,
+    DatabaseConfig,
+    EmailConfig,
+    FederationConfig,
+    RateLimitConfig,
+    Settings,
+    SetupConfig,
   },
   LemmyError,
 };
@@ -63,15 +60,11 @@ impl Settings {
     let conf = self.database();
     format!(
       "postgres://{}:{}@{}:{}/{}",
-      conf
-        .user
-        .unwrap_or_else(|| DEFAULT_DATABASE_USER.to_string()),
+      conf.user(),
       conf.password,
       conf.host,
-      conf.port.unwrap_or(DEFAULT_DATABASE_PORT),
-      conf
-        .database
-        .unwrap_or_else(|| DEFAULT_DATABASE_DB.to_string()),
+      conf.port(),
+      conf.database(),
     )
   }
 
diff --git a/crates/utils/src/settings/structs.rs b/crates/utils/src/settings/structs.rs
index 05c7ed47..3863f6e3 100644
--- a/crates/utils/src/settings/structs.rs
+++ b/crates/utils/src/settings/structs.rs
@@ -27,12 +27,40 @@ pub struct CaptchaConfig {
 
 #[derive(Debug, Deserialize, Clone)]
 pub struct DatabaseConfig {
-  pub user: Option<String>,
+  pub(super) user: Option<String>,
   pub password: String,
   pub host: String,
-  pub port: Option<i32>,
-  pub database: Option<String>,
-  pub pool_size: Option<u32>,
+  pub(super) port: Option<i32>,
+  pub(super) database: Option<String>,
+  pub(super) pool_size: Option<u32>,
+}
+
+impl DatabaseConfig {
+  pub fn user(&self) -> String {
+    self
+      .user
+      .to_owned()
+      .unwrap_or_else(|| DatabaseConfig::default().user.expect("missing user"))
+  }
+  pub fn port(&self) -> i32 {
+    self
+      .port
+      .unwrap_or_else(|| DatabaseConfig::default().port.expect("missing port"))
+  }
+  pub fn database(&self) -> String {
+    self.database.to_owned().unwrap_or_else(|| {
+      DatabaseConfig::default()
+        .database
+        .expect("missing database")
+    })
+  }
+  pub fn pool_size(&self) -> u32 {
+    self.pool_size.unwrap_or_else(|| {
+      DatabaseConfig::default()
+        .pool_size
+        .expect("missing pool_size")
+    })
+  }
 }
 
 #[derive(Debug, Deserialize, Clone)]
diff --git a/src/main.rs b/src/main.rs
index 0e3cb49f..8cda9ff4 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -16,7 +16,7 @@ use lemmy_routes::{feeds, images, nodeinfo, webfinger};
 use lemmy_server::{api_routes, code_migrations::run_advanced_migrations, scheduled_tasks};
 use lemmy_utils::{
   rate_limit::{rate_limiter::RateLimiter, RateLimit},
-  settings::{defaults::DEFAULT_DATABASE_POOL_SIZE, structs::Settings},
+  settings::structs::Settings,
   LemmyError,
 };
 use lemmy_websocket::{chat_server::ChatServer, LemmyContext};
@@ -38,12 +38,7 @@ async fn main() -> Result<(), LemmyError> {
   };
   let manager = ConnectionManager::<PgConnection>::new(&db_url);
   let pool = Pool::builder()
-    .max_size(
-      settings
-        .database()
-        .pool_size
-        .unwrap_or(DEFAULT_DATABASE_POOL_SIZE),
-    )
+    .max_size(settings.database().pool_size())
     .build(manager)
     .unwrap_or_else(|_| panic!("Error connecting to {}", db_url));
 
-- 
2.44.1