use anyhow::Result;
use std::net::SocketAddr;
use thiserror::Error;
use tokio::net::{lookup_host, ToSocketAddrs};
mod certificates;
mod client;
mod server;
pub use client::TlsClient;
pub use server::{TlsServer,TlsListener};
pub use tokio_rustls::TlsStream;
#[derive(Error, Debug)]
pub enum EasyTlsError {
#[error("Failed to resolve address for '{0}'")]
ResolutionFailure(String),
#[error("Failed to resolve address for '{0}'")]
CertificateError(String),
}
pub async fn resolve_address<T>(host: T) -> Result<SocketAddr>
where
T: ToSocketAddrs + ToString + Copy,
{
let mut addresses = lookup_host(host).await?;
let address = addresses
.next()
.ok_or_else(|| EasyTlsError::ResolutionFailure(host.to_string()))?;
Ok(address)
}