use std::net::IpAddr;
use std::time::Duration;
use serde::{Deserialize, Serialize};
use crate::connection::Family;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DnsResolution {
pub queried: String,
pub via: DnsSource,
pub upstream_used: Option<IpAddr>,
pub answers: Vec<DnsAnswer>,
pub took: Duration,
pub cached: bool,
pub authenticated: bool,
pub error: Option<DnsError>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", content = "addr", rename_all = "snake_case")]
pub enum DnsSource {
Stub(IpAddr),
Direct(IpAddr),
Mdns,
Libc,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DnsAnswer {
pub ip: IpAddr,
pub family: Family,
pub ttl: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum DnsError {
NxDomain,
ServFail,
Timeout,
Other(String),
}