--- /dev/null
+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