summaryrefslogtreecommitdiff
path: root/dichroism/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dichroism/src/config.rs')
-rw-r--r--dichroism/src/config.rs32
1 files changed, 31 insertions, 1 deletions
diff --git a/dichroism/src/config.rs b/dichroism/src/config.rs
index e5b4046..c3dec51 100644
--- a/dichroism/src/config.rs
+++ b/dichroism/src/config.rs
@@ -1 +1,31 @@
-struct Config {}
+use crate::constants::*;
+use crate::error::DichroismError;
+use crate::result::Result;
+use async_std::fs::metadata;
+use async_std::path::PathBuf;
+use std::env;
+use std::net::SocketAddr;
+
+#[derive(Debug, Clone)]
+pub struct Config {
+ pub db_url: String,
+ pub img_root: PathBuf,
+ 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()?,
+ })
+ }
+}