]> Untitled Git - lemmy.git/commitdiff
Set attribute `deny_unknown_fields` for Lemmy config (#2852)
authorNutomic <me@nutomic.com>
Fri, 12 May 2023 00:12:12 +0000 (02:12 +0200)
committerGitHub <noreply@github.com>
Fri, 12 May 2023 00:12:12 +0000 (20:12 -0400)
With this attribute, Lemmy will throw an error and exit if any
invalid entry is found in the config file. I think can be useful
to notice typos or keys that were removed or renamed in an upgrade.
Currently you wouldnt notice these at all unless you manually
compare the config file with settings that are listed in documentation.

This should be considered a breaking change.

Co-authored-by: Dessalines <dessalines@users.noreply.github.com>
crates/utils/src/error.rs
crates/utils/src/settings/mod.rs
crates/utils/src/settings/structs.rs

index 6fb5e5155b08aa7cdab01f28100396f4fc5543da..1aa3e1c62623fcc9ec0a6526cfd8b400457e948f 100644 (file)
@@ -80,7 +80,7 @@ impl Debug for LemmyError {
     f.debug_struct("LemmyError")
       .field("message", &self.message)
       .field("inner", &self.inner)
-      .field("context", &"SpanTrace")
+      .field("context", &self.context)
       .finish()
   }
 }
index fe8c8ae4f69cda7b17c0da3ae485a75120ebfa2d..cd181ffb5cfa33fadd383949f62a3f84deebd375 100644 (file)
@@ -14,8 +14,9 @@ pub mod structs;
 
 static DEFAULT_CONFIG_FILE: &str = "config/config.hjson";
 
-pub static SETTINGS: Lazy<Settings> =
-  Lazy::new(|| Settings::init().expect("Failed to load settings file"));
+pub static SETTINGS: Lazy<Settings> = Lazy::new(|| {
+  Settings::init().expect("Failed to load settings file, see documentation (https://join-lemmy.org/docs/en/administration/configuration.html)")
+});
 static WEBFINGER_REGEX: Lazy<Regex> = Lazy::new(|| {
   Regex::new(&format!(
     "^acct:([a-zA-Z0-9_]{{3,}})@{}$",
@@ -53,11 +54,11 @@ impl Settings {
     )
   }
 
-  pub fn get_config_location() -> String {
+  fn get_config_location() -> String {
     env::var("LEMMY_CONFIG_LOCATION").unwrap_or_else(|_| DEFAULT_CONFIG_FILE.to_string())
   }
 
-  pub fn read_config_file() -> Result<String, Error> {
+  fn read_config_file() -> Result<String, Error> {
     fs::read_to_string(Self::get_config_location())
   }
 
index 9d46dbe8acb6b02ae672e64d0cfd67bbf3c9f465..c135c3a8ca3896234a7be686cacada73b91c2071 100644 (file)
@@ -42,7 +42,7 @@ pub struct Settings {
 }
 
 #[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
-#[serde(default)]
+#[serde(default, deny_unknown_fields)]
 pub struct PictrsConfig {
   /// Address where pictrs is available (for image hosting)
   #[default(Url::parse("http://localhost:8080").expect("parse pictrs url"))]
@@ -55,7 +55,7 @@ pub struct PictrsConfig {
 }
 
 #[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
-#[serde(default)]
+#[serde(default, deny_unknown_fields)]
 pub struct DatabaseConfig {
   /// Username to connect to postgres
   #[default("lemmy")]
@@ -78,6 +78,7 @@ pub struct DatabaseConfig {
 }
 
 #[derive(Debug, Deserialize, Serialize, Clone, Document, SmartDefault)]
+#[serde(deny_unknown_fields)]
 pub struct EmailConfig {
   /// Hostname and port of the smtp server
   #[doku(example = "localhost:25")]
@@ -96,6 +97,7 @@ pub struct EmailConfig {
 }
 
 #[derive(Debug, Deserialize, Serialize, Clone, SmartDefault, Document)]
+#[serde(deny_unknown_fields)]
 pub struct SetupConfig {
   /// Username for the admin user
   #[doku(example = "admin")]