pub mod txt;
use async_trait::async_trait;
use scion_proto::address::ScionAddr;
use thiserror::Error;
#[async_trait]
pub trait ScionDnsResolver: Send + Sync {
async fn resolve(&self, domain: &str) -> Result<Vec<ScionAddr>, ResolveError>;
}
#[derive(Debug, Error, PartialEq)]
pub enum ResolveError {
#[error("dns lookup failed: {0}")]
DnsLookup(String),
#[error("no valid TSAR TXT entries for {domain}")]
NoValidEntries {
domain: String,
invalid_entries: Vec<InvalidEntry>,
},
}
#[derive(Debug, Clone, PartialEq)]
pub struct InvalidEntry {
raw: String,
reason: String,
}
impl InvalidEntry {
pub(crate) fn new(raw: impl Into<String>, reason: impl Into<String>) -> Self {
Self {
raw: raw.into(),
reason: reason.into(),
}
}
pub fn raw(&self) -> &str {
&self.raw
}
pub fn reason(&self) -> &str {
&self.reason
}
}