2308dd0
use std::net::IpAddr;
use serde::Deserialize;
#[derive(Clone, Debug, Deserialize)]
#[serde(default)]
#[derive(Default)]
pub struct WebhookConfig {
pub enabled: Option<bool>,
pub bind_addr: Option<String>,
pub port: Option<u16>,
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::<IpAddr>().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(())
}
}