use crate::env_parsable;
use anyhow::Result;
use std::env;
#[derive(Debug, Clone)]
pub struct HttpServerConfig {
pub addr: String,
pub port: u16,
pub uri: String,
pub url: String,
}
impl HttpServerConfig {
pub fn init_for(default_host: &str, default_port: u16) -> Result<HttpServerConfig> {
let addr = env::var("HOST").unwrap_or(default_host.to_string());
let port = env_parsable::<u16>("PORT", default_port)?;
let uri = env::var("APP_URI").unwrap_or("".to_string());
let url = format!("http://{}{}{}/",
if addr == "0" { "localhost" } else { &addr },
if port == 80 { "".to_string() } else { format!(":{}", port) },
if uri.is_empty() { "".to_string() } else { format!("/{}", uri) });
Ok(HttpServerConfig { addr, port, uri, url })
}
}
impl ToString for HttpServerConfig {
fn to_string(&self) -> String {
format!(
r#"# APP_URL --> {}
APP_URI="{}"
HOST={}
PORT={}"#,
self.url,
self.uri,
self.addr,
self.port,
)
}
}