#![allow(unused_imports, dead_code, clippy::module_inception)]
#![warn(missing_docs)]
use std::fmt;
use std::net::SocketAddr;
use std::path::PathBuf;
use crate::ids::{AureliaError, TabernaId};
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub enum DomusAddr {
Tcp(SocketAddr),
Socket(PathBuf),
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TransportKind {
Tcp,
Socket,
}
impl DomusAddr {
pub fn kind(&self) -> TransportKind {
match self {
DomusAddr::Tcp(_) => TransportKind::Tcp,
DomusAddr::Socket(_) => TransportKind::Socket,
}
}
pub fn as_tcp(&self) -> Option<SocketAddr> {
match self {
DomusAddr::Tcp(addr) => Some(*addr),
_ => None,
}
}
}
impl fmt::Display for DomusAddr {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DomusAddr::Tcp(addr) => write!(f, "tcp://{addr}"),
DomusAddr::Socket(path) => write!(f, "unix://{}", path.to_string_lossy()),
}
}
}
impl fmt::Display for TransportKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TransportKind::Tcp => write!(f, "tcp"),
TransportKind::Socket => write!(f, "socket"),
}
}
}
#[async_trait::async_trait]
pub trait RouteResolver: Send + Sync {
async fn resolve(&self, taberna_id: TabernaId) -> Result<DomusAddr, AureliaError>;
}