use std::net::IpAddr; use serde::Deserialize; #[derive(Clone, Debug, Deserialize)] #[serde(default)] #[derive(Default)] pub struct WebhookConfig { pub enabled: Option, pub bind_addr: Option, pub port: Option, pub public_base_url: String, } impl WebhookConfig { pub fn enabled(&self) -> bool { self.enabled.unwrap_or(true) } pub fn bind_addr(&self) -> &str { self.bind_addr.as_deref().unwrap_or("0.0.0.0") } pub fn port(&self) -> u16 { self.port.unwrap_or(3005) } pub fn is_valid(&self) -> Result<(), String> { if !self.enabled() { return Ok(()); } if self.bind_addr().parse::().is_err() { return Err(format!( "webhook.bind_addr is not a valid IP: {:?}", self.bind_addr() )); } if self.port == Some(0) { return Err("webhook.port must be greater than 0".to_string()); } Ok(()) } }