From dbbf1937ddc0c4030bfdbfb416eeaf8809453409 Mon Sep 17 00:00:00 2001
From: Georgy Moshkin <gmoshkin@picodata.io>
Date: Wed, 13 Mar 2024 13:01:09 +0300
Subject: [PATCH] refactor: PicodataConfig::set_from_args now returns a Result

---
 src/config.rs | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/config.rs b/src/config.rs
index 2015b63531..d0867f3a18 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -113,7 +113,7 @@ Using configuration file '{args_path}'.");
             Default::default()
         };
 
-        config.set_from_args(args);
+        config.set_from_args(args)?;
 
         config.validate_common()?;
 
@@ -133,7 +133,7 @@ Using configuration file '{args_path}'.");
         Ok(config)
     }
 
-    pub fn set_from_args(&mut self, args: args::Run) {
+    pub fn set_from_args(&mut self, args: args::Run) -> Result<(), Error> {
         // TODO: add forbid_conflicts_with_args so that it's considered an error
         // if a parameter is specified both in the config and in the command line
         // arguments
@@ -219,6 +219,8 @@ Using configuration file '{args_path}'.");
         if let Some(memtx_memory) = args.memtx_memory {
             self.instance.memtx_memory = Some(memtx_memory);
         }
+
+        Ok(())
     }
 
     /// Does checks which are applicable to configuration loaded from a file.
@@ -1079,7 +1081,7 @@ instance:
         {
             let mut config = PicodataConfig::default();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(
                 config.instance.peers(),
@@ -1108,7 +1110,7 @@ instance:
             // only config
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.instance_id().unwrap(), "I-CONFIG");
 
@@ -1116,14 +1118,14 @@ instance:
             std::env::set_var("PICODATA_INSTANCE_ID", "I-ENVIRON");
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.instance_id().unwrap(), "I-ENVIRON");
 
             // command line > env
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run", "--instance-id=I-COMMANDLINE"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.instance_id().unwrap(), "I-COMMANDLINE");
         }
@@ -1139,7 +1141,7 @@ instance:
 "###;
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(
                 config.instance.peers(),
@@ -1161,7 +1163,7 @@ instance:
 "###;
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(
                 config.instance.peers(),
@@ -1183,7 +1185,7 @@ instance:
             std::env::set_var("PICODATA_PEER", "oops there's a space over here -> <-:13,             maybe we should at least strip these:37");
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(
                 config.instance.peers(),
@@ -1207,7 +1209,7 @@ instance:
                 "--peer", "one:1",
                 "--peer", "two:2,    <- same problem here,:3,4"
             ]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(
                 config.instance.peers(),
@@ -1248,7 +1250,7 @@ instance:
             std::env::set_var("PICODATA_LISTEN", "L-ENVIRON");
             let mut config = PicodataConfig::read_yaml_contents("").unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.listen().to_host_port(), "L-ENVIRON:3301");
             assert_eq!(config.instance.advertise_address().to_host_port(), "L-ENVIRON:3301");
@@ -1259,14 +1261,14 @@ instance:
 "###;
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.listen().to_host_port(), "L-ENVIRON:3301");
             assert_eq!(config.instance.advertise_address().to_host_port(), "A-CONFIG:3301");
 
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run", "-l", "L-COMMANDLINE"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
 
             assert_eq!(config.instance.listen().to_host_port(), "L-COMMANDLINE:3301");
             assert_eq!(config.instance.advertise_address().to_host_port(), "A-CONFIG:3301");
@@ -1287,7 +1289,7 @@ instance:
 "###;
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
             assert_eq!(
                 config.instance.failure_domain(),
                 FailureDomain::from([("KCONF1", "VCONF1"), ("KCONF2", "VCONF2-REPLACED")])
@@ -1297,7 +1299,7 @@ instance:
             std::env::set_var("PICODATA_FAILURE_DOMAIN", "kenv1=venv1,kenv2=venv2,kenv2=venv2-replaced");
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
             assert_eq!(
                 config.instance.failure_domain(),
                 FailureDomain::from([("KENV1", "VENV1"), ("KENV2", "VENV2-REPLACED")])
@@ -1306,7 +1308,7 @@ instance:
             // command line
             let mut config = PicodataConfig::read_yaml_contents(&yaml).unwrap();
             let args = args::Run::try_parse_from(["run", "--failure-domain", "karg1=varg1,karg1=varg1-replaced"]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
             assert_eq!(
                 config.instance.failure_domain(),
                 FailureDomain::from([("KARG1", "VARG1-REPLACED")])
@@ -1318,7 +1320,7 @@ instance:
                 "--failure-domain", "foo=1",
                 "--failure-domain", "bar=2,baz=3"
             ]).unwrap();
-            config.set_from_args(args);
+            config.set_from_args(args).unwrap();
             assert_eq!(
                 config.instance.failure_domain(),
                 FailureDomain::from([
-- 
GitLab