use serde::{Deserialize, Serialize};
const DEFAULT_TUN_NAME: &str = "fips0";
const DEFAULT_TUN_MTU: u16 = 1280;
const DEFAULT_DNS_BIND_ADDR: &str = "::1";
const DEFAULT_DNS_PORT: u16 = 5354;
const DEFAULT_DNS_TTL: u32 = 300;
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DnsConfig {
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bind_addr: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<u16>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl: Option<u32>,
}
impl Default for DnsConfig {
fn default() -> Self {
Self {
enabled: true,
bind_addr: None,
port: None,
ttl: None,
}
}
}
impl DnsConfig {
pub fn bind_addr(&self) -> &str {
self.bind_addr.as_deref().unwrap_or(DEFAULT_DNS_BIND_ADDR)
}
pub fn port(&self) -> u16 {
self.port.unwrap_or(DEFAULT_DNS_PORT)
}
pub fn ttl(&self) -> u32 {
self.ttl.unwrap_or(DEFAULT_DNS_TTL)
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TunConfig {
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mtu: Option<u16>,
}
impl TunConfig {
pub fn name(&self) -> &str {
self.name.as_deref().unwrap_or(DEFAULT_TUN_NAME)
}
pub fn mtu(&self) -> u16 {
self.mtu.unwrap_or(DEFAULT_TUN_MTU)
}
}