Просмотр исходного кода

util/cli: implement UrlConfig for various url configuration in toml
files

ghassmo 4 лет назад
Родитель
Сommit
c66dddaee3
2 измененных файлов с 26 добавлено и 1 удалено
  1. 1 0
      Cargo.toml
  2. 25 1
      src/util/cli.rs

+ 1 - 0
Cargo.toml

@@ -132,6 +132,7 @@ util = [
     "bincode",
     "serde",
 	"toml",
+	"url",
     "simplelog",
     "serde_json",
     "dirs",

+ 25 - 1
src/util/cli.rs

@@ -6,7 +6,7 @@ use std::{
     str,
 };
 
-use serde::{de::DeserializeOwned, Serialize};
+use serde::{de::DeserializeOwned, Serialize, Deserialize};
 use simplelog::ConfigBuilder;
 
 use crate::{Error, Result};
@@ -73,3 +73,27 @@ pub fn log_config(verbosity_level: u64) -> Result<(simplelog::LevelFilter, simpl
 
     Ok((log_level, log_config))
 }
+
+#[derive(Clone, Serialize, Deserialize, Debug)]
+pub struct UrlConfig {
+    pub url: String,
+    pub username: Option<String>,
+    pub password: Option<String>,
+}
+
+impl TryFrom<UrlConfig> for url::Url {
+    type Error = url::ParseError;
+
+    // TODO remove unwraps 
+    fn try_from(urlc: UrlConfig) -> std::result::Result<Self, Self::Error> {
+        let mut url = url::Url::parse(&urlc.url)?;
+
+        url.set_password(urlc.password.as_deref()).unwrap();
+
+        if urlc.username.is_some() {
+            url.set_username(&urlc.username.unwrap()).unwrap();
+        }
+
+        Ok(url)
+    }
+}