Merge branch 'master' of gburri.org:gandi_dns_update
[gandi_dns_update.git] / src / config.rs
diff --git a/src/config.rs b/src/config.rs
new file mode 100644 (file)
index 0000000..d8a13d9
--- /dev/null
@@ -0,0 +1,38 @@
+use std::{fs::File, time};\r
+\r
+use ron::{de::from_reader, ser::to_writer};\r
+use serde::{Deserialize, Serialize};\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 domains: Vec<(String, String)>, // Hostname, domain.\r
+    pub ttl: i32,\r
+}\r
+\r
+impl Config {\r
+    pub fn default() -> Self {\r
+        Config {\r
+            delay_between_check: time::Duration::from_secs(120),\r
+            api_key: String::from(""),\r
+            domains: Vec::new(),\r
+            ttl: 300,\r
+        }\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
+}\r