use serde::{Deserialize, Serialize};
use crate::types::record::RecordType;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DnsProtocol {
Udp,
Tcp,
Tls,
Https,
Quic,
}
impl std::fmt::Display for DnsProtocol {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Udp => write!(f, "Udp"),
Self::Tcp => write!(f, "Tcp"),
Self::Tls => write!(f, "Tls"),
Self::Https => write!(f, "Https"),
Self::Quic => write!(f, "Quic"),
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct DnsRecord {
pub name: String,
#[serde(rename = "Type")]
pub record_type: RecordType,
#[serde(flatten)]
pub data: serde_json::Value,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct DnsResolveResponse {
pub result: DnsQueryResult,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct DnsQueryResult {
#[serde(default)]
pub answer: Vec<DnsRecord>,
#[serde(default)]
pub authority: Vec<DnsRecord>,
#[serde(default)]
pub additional: Vec<DnsRecord>,
#[serde(flatten)]
pub extra: serde_json::Value,
}