pub mod http; mod util; use crate::domain; use serde::{Deserialize, Serialize}; use std::{net, str::FromStr}; fn default_primary_domain() -> domain::Name { domain::Name::from_str("localhost").unwrap() } #[derive(Serialize, Deserialize, Clone, PartialEq)] #[serde(tag = "type")] pub enum ConfigDNSRecord { A { addr: net::Ipv4Addr }, AAAA { addr: net::Ipv6Addr }, CNAME { name: domain::Name }, } impl From for domain::checker::DNSRecord { fn from(r: ConfigDNSRecord) -> Self { match r { ConfigDNSRecord::A { addr } => Self::A(addr), ConfigDNSRecord::AAAA { addr } => Self::AAAA(addr), ConfigDNSRecord::CNAME { name } => Self::CNAME(name), } } } #[derive(Deserialize)] pub struct Config { pub passphrase: String, pub dns_records: Vec, #[serde(default = "default_primary_domain")] pub primary_domain: domain::Name, #[serde(default)] pub http: self::http::Config, }