use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct HttpBindConfig {
pub domain_name: String,
pub advertised_ip: String,
pub ip: String,
pub port: u16,
#[serde(default)]
pub advertised_port: Option<u16>,
#[serde(default)]
pub cert: Option<String>,
#[serde(default)]
pub key: Option<String>,
}
impl HttpBindConfig {
pub fn is_tls(&self) -> bool {
self.cert.as_ref().is_some_and(|c| !c.is_empty())
&& self.key.as_ref().is_some_and(|k| !k.is_empty())
}
pub fn effective_advertised_port(&self) -> u16 {
self.advertised_port.unwrap_or(self.port)
}
pub fn scheme(&self) -> &'static str {
if self.is_tls() { "https" } else { "http" }
}
pub fn ws_scheme(&self) -> &'static str {
if self.is_tls() { "wss" } else { "ws" }
}
}
impl Default for HttpBindConfig {
fn default() -> Self {
Self {
domain_name: "localhost".to_string(),
advertised_ip: "127.0.0.1".to_string(),
ip: "::".to_string(),
port: 8080,
advertised_port: None,
cert: None,
key: None,
}
}
}