use serde::{Deserialize, Serialize};
#[cfg(feature = "governance")]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GovernanceConfig {
#[serde(default = "crate::config::default_false")]
pub enabled: bool,
#[serde(default)]
pub commons_url: Option<String>,
#[serde(default)]
pub api_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BanListSharingConfig {
#[serde(default = "crate::config::default_true")]
pub enabled: bool,
#[serde(default = "default_ban_share_mode")]
pub share_mode: BanShareMode,
#[serde(default = "default_periodic_interval")]
pub periodic_interval_seconds: u64,
#[serde(default = "default_min_ban_duration")]
pub min_ban_duration_to_share: u64,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum BanShareMode {
Immediate,
Periodic,
Disabled,
}
fn default_ban_share_mode() -> BanShareMode {
BanShareMode::Periodic
}
fn default_periodic_interval() -> u64 {
300 }
fn default_min_ban_duration() -> u64 {
3600 }
impl Default for BanListSharingConfig {
fn default() -> Self {
Self {
enabled: true,
share_mode: BanShareMode::Periodic,
periodic_interval_seconds: 300,
min_ban_duration_to_share: 3600,
}
}
}