Split in modules
[gandi_dns_update.git] / src / config.rs
diff --git a/src/config.rs b/src/config.rs
new file mode 100644 (file)
index 0000000..e3b1309
--- /dev/null
@@ -0,0 +1,33 @@
+use ron::{ de::from_reader, ser::to_writer };\r
+use serde::{ Deserialize, Serialize };\r
+use std::{ fs::File, time };\r
+\r
+use crate::error::Result;\r
+\r
+#[derive(Debug, Clone, Deserialize, Serialize)]\r
+pub struct Config {\r
+    pub delay_between_check: time::Duration,\r
+    pub api_key: String,\r
+    pub fqdn: String,\r
+    pub domains: Vec<String>,\r
+    pub ttl: i32\r
+}\r
+\r
+impl Config {\r
+    pub fn default() -> Self {\r
+        Config { delay_between_check: time::Duration::from_secs(120), api_key: String::from(""), fqdn: String::from(""), domains: Vec::new(), ttl: 300 }\r
+    }\r
+\r
+    pub fn read(file_path: &str) -> Result<Config> {\r
+        match File::open(file_path) {\r
+            Ok(file) => from_reader(file).map_err(|e| e.into()),\r
+            // The file doesn't exit -> create it with default values.\r
+            Err(_) => {\r
+                let file = File::create(file_path)?;\r
+                let default_config = Config::default();\r
+                to_writer(file, &default_config)?;\r
+                Ok(default_config)\r
+            }\r
+        }\r
+    }\r
+}
\ No newline at end of file