Przeglądaj źródła

create ClientProgramOptions for Service Clients

ghassmo 5 lat temu
rodzic
commit
944a49c03f
2 zmienionych plików z 65 dodań i 1 usunięć
  1. 1 1
      src/service/mod.rs
  2. 64 0
      src/service/options.rs

+ 1 - 1
src/service/mod.rs

@@ -3,4 +3,4 @@ pub mod options;
 pub mod reqrep;
 
 pub use gateway::{GatewayClient, GatewayService};
-pub use options::ProgramOptions;
+pub use options::{ClientProgramOptions, ProgramOptions};

+ 64 - 0
src/service/options.rs

@@ -52,3 +52,67 @@ impl ProgramOptions {
         })
     }
 }
+
+pub struct ClientProgramOptions {
+    pub connect_addr: Option<SocketAddr>,
+    pub sub_addr: Option<SocketAddr>,
+    pub verbose: bool,
+    pub slabstore_path: Box<std::path::PathBuf>,
+    pub log_path: Box<std::path::PathBuf>,
+}
+
+impl ClientProgramOptions {
+    pub fn load() -> Result<Self> {
+        let app = clap_app!(dfi =>
+            (version: "0.1.0")
+            (author: "Amir Taaki <amir@dyne.org>")
+            (about: "run service daemon")
+            (@arg CONNECT: -c --connect +takes_value "Connect add//ress")
+            (@arg SUB_ADDR: -s --subaddr +takes_value "Subscriber addr")
+            (@arg VERBOSE: -v --verbose "Increase verbosity")
+            (@arg SLABSTORE_PATH: --slabstore +takes_value "slabstore path")
+            (@arg LOG_PATH: --log +takes_value "Logfile path")
+        )
+        .get_matches();
+
+        let connect_addr = if let Some(connect_addr) = app.value_of("CONNECT") {
+            Some(connect_addr.parse()?)
+        } else {
+            None
+        };
+
+        let sub_addr = if let Some(sub_addr) = app.value_of("SUB_ADDR") {
+            Some(sub_addr.parse()?)
+        } else {
+            None
+        };
+
+        let verbose = app.is_present("VERBOSE");
+
+        let slabstore_path = Box::new(
+            if let Some(slabstore_path) = app.value_of("SLABSTORE_PATH") {
+                std::path::Path::new(slabstore_path)
+            } else {
+                std::path::Path::new("slabstore_client.db")
+            }
+            .to_path_buf(),
+        );
+
+        let log_path = Box::new(
+            if let Some(log_path) = app.value_of("LOG_PATH") {
+                std::path::Path::new(log_path)
+            } else {
+                std::path::Path::new("/tmp/darkfid_service_daemon.log")
+            }
+            .to_path_buf(),
+        );
+
+        Ok(ClientProgramOptions {
+            connect_addr,
+            sub_addr,
+            verbose,
+            slabstore_path,
+            log_path,
+        })
+    }
+}