diff options
Diffstat (limited to 'dichroism/src/config.rs')
-rw-r--r-- | dichroism/src/config.rs | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/dichroism/src/config.rs b/dichroism/src/config.rs index c3dec51..c1c42f0 100644 --- a/dichroism/src/config.rs +++ b/dichroism/src/config.rs @@ -1,31 +1,24 @@ -use crate::constants::*; -use crate::error::DichroismError; +use crate::constants::DEFAULT_CONFIG; use crate::result::Result; -use async_std::fs::metadata; -use async_std::path::PathBuf; -use std::env; +use serde::Deserialize; +use std::env::var; +use std::fs::File; +use std::io::prelude::*; use std::net::SocketAddr; +use toml::from_str; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Deserialize)] pub struct Config { pub db_url: String, - pub img_root: PathBuf, + pub img_root: String, pub bind_addr: SocketAddr, } impl Config { - pub async fn new_from_env() -> Result<Self> { - let img_root = PathBuf::from(env::var(ENV_IMG_ROOT)?); - let meta = metadata(&img_root).await?; - - if !meta.is_dir() || meta.permissions().readonly() { - return Err(Box::new(DichroismError::InvalidImageRoot)); - } - - Ok(Config { - db_url: env::var(ENV_DB_URL)?, - img_root, - bind_addr: env::var(ENV_BIND_ADDR)?.parse()?, - }) + pub fn from_toml() -> Result<Self> { + let path = var("DICHROISM_CONFIG").unwrap_or_else(|_| String::from(DEFAULT_CONFIG)); + let mut config = String::new(); + File::open(path)?.read_to_string(&mut config)?; + Ok(from_str(&config)?) } } |