2024-03-17 20:22:23 +00:00
|
|
|
use anyhow::{bail, Result};
|
|
|
|
use log::info;
|
|
|
|
use std::env;
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct Config {
|
2024-03-18 21:58:45 +00:00
|
|
|
pub addr: String,
|
|
|
|
pub port: u16,
|
|
|
|
pub database: String,
|
|
|
|
pub threads: Option<u16>,
|
2024-03-17 20:22:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Config {
|
|
|
|
/// Loads the configuration from environment variables
|
|
|
|
pub fn from_env() -> Result<Self> {
|
|
|
|
Ok(Self {
|
|
|
|
addr: env::var("CR_ADDRESS").unwrap_or_else(|_| {
|
|
|
|
info!("Using default address 0.0.0.0");
|
|
|
|
"0.0.0.0".to_string()
|
|
|
|
}),
|
|
|
|
port: match env::var("CR_PORT") {
|
|
|
|
Ok(str) => match str.parse() {
|
|
|
|
Ok(port) => port,
|
|
|
|
Err(_) => bail!("Failed to parse environment variable CR_PORT: '{str}' is not a valid port number!"),
|
|
|
|
},
|
|
|
|
Err(_) => { info!("Using default port 42069"); 42069 }
|
|
|
|
},
|
|
|
|
database: match env::var("CR_DATABASE") {
|
|
|
|
Ok(db) => db,
|
|
|
|
Err(_) => bail!("The environment variable CR_DATABASE is required!"),
|
2024-03-18 21:58:45 +00:00
|
|
|
},
|
|
|
|
threads: match env::var("CR_THREADS") {
|
|
|
|
Ok(str) => match str.parse() {
|
|
|
|
Ok(threads) => Some(threads),
|
|
|
|
Err(_) => bail!("Failed to parse environment variable CR_THREAD: '{str}' is not a valid number!"),
|
|
|
|
},
|
|
|
|
Err(_) => None
|
|
|
|
},
|
2024-03-17 20:22:23 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|