use std::env;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Config {
pub bind_addr: String,
pub login_upstream_url: Option<String>,
pub pay_upstream_url: Option<String>,
}
impl Config {
pub fn from_env() -> Self {
let bind_addr = env::var("CEDROS_ADMIN_BIND_ADDR")
.or_else(|_| env::var("PORT").map(|port| format!("127.0.0.1:{port}")))
.unwrap_or_else(|_| Self::default().bind_addr);
let login_upstream_url = env::var("CEDROS_ADMIN_LOGIN_UPSTREAM_URL")
.ok()
.and_then(normalize_optional_string);
let pay_upstream_url = env::var("CEDROS_ADMIN_PAY_UPSTREAM_URL")
.ok()
.and_then(normalize_optional_string);
Self {
bind_addr,
login_upstream_url,
pay_upstream_url,
}
}
}
impl Default for Config {
fn default() -> Self {
Self {
bind_addr: "127.0.0.1:8080".to_string(),
login_upstream_url: None,
pay_upstream_url: None,
}
}
}
fn normalize_optional_string(value: String) -> Option<String> {
let trimmed = value.trim();
if trimmed.is_empty() {
None
} else {
Some(trimmed.to_string())
}
}
#[cfg(test)]
mod tests {
use super::Config;
#[test]
fn uses_default_bind_addr() {
let config = Config::default();
assert_eq!(config.bind_addr, "127.0.0.1:8080");
assert_eq!(config.login_upstream_url, None);
assert_eq!(config.pay_upstream_url, None);
}
}