Преглед изворни кода

" crate program options for service daemon

ghassmo пре 5 година
родитељ
комит
1d0b871c9e
2 измењених фајлова са 57 додато и 0 уклоњено
  1. 2 0
      src/service/mod.rs
  2. 55 0
      src/service/options.rs

+ 2 - 0
src/service/mod.rs

@@ -1,4 +1,6 @@
 pub mod gateway;
 pub mod gateway;
 pub mod reqrep;
 pub mod reqrep;
+pub mod options;
 
 
 pub use gateway::{fetch_slabs_loop, GatewayClient, GatewayService};
 pub use gateway::{fetch_slabs_loop, GatewayClient, GatewayService};
+pub use options::ProgramOptions;

+ 55 - 0
src/service/options.rs

@@ -0,0 +1,55 @@
+use crate::Result;
+use std::net::SocketAddr;
+
+pub struct ProgramOptions {
+    pub accept_addr: Option<SocketAddr>,
+    pub pub_addr: Option<SocketAddr>,
+    pub verbose: bool,
+    pub log_path: Box<std::path::PathBuf>,
+}
+
+
+impl ProgramOptions {
+    pub fn load() -> Result<ProgramOptions> {
+        let app = clap_app!(dfi =>
+            (version: "0.1.0")
+            (author: "Amir Taaki <amir@dyne.org>")
+            (about: "run service daemon")
+            (@arg ACCEPT: -a --accept +takes_value "Accept add//ress")
+            (@arg PUB_ADDR: -p --pubaddr +takes_value "Publisher addr")
+            (@arg VERBOSE: -v --verbose "Increase verbosity")
+            (@arg LOG_PATH: --log +takes_value "Logfile path")
+        )
+            .get_matches();
+
+        let accept_addr = if let Some(accept_addr) = app.value_of("ACCEPT") {
+            Some(accept_addr.parse()?)
+        } else {
+            None
+        };
+
+        let pub_addr = if let Some(pub_addr) = app.value_of("PUB_ADDR") {
+            Some(pub_addr.parse()?)
+        } else {
+            None
+        };
+
+        let verbose = app.is_present("VERBOSE");
+
+        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(ProgramOptions {
+            accept_addr,
+            pub_addr,
+            verbose,
+            log_path
+        })
+    }
+}