|
|
|
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 = "kind")]
|
|
|
|
pub enum ConfigDNSRecord {
|
|
|
|
A { addr: net::Ipv4Addr },
|
|
|
|
AAAA { addr: net::Ipv6Addr },
|
|
|
|
CNAME { name: domain::Name },
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<ConfigDNSRecord> 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<ConfigDNSRecord>,
|
|
|
|
#[serde(default = "default_primary_domain")]
|
|
|
|
pub primary_domain: domain::Name,
|
|
|
|
#[serde(default)]
|
|
|
|
pub http: self::http::Config,
|
|
|
|
}
|