#[derive(Debug, thiserror::Error)] pub enum ConfigError { #[error("missing {0}")] Missing(&'static str), #[error("invalid port: {0}")] Port(#[from] std::num::ParseIntError), } pub fn port() -> Result<u16, ConfigError> { let raw = std::env::var("PORT").map_err(|_| ConfigError::Missing("PORT"))?; Ok(raw.parse()?) }