use std::{fmt::Debug, sync::Arc};
use anyhow::Error;
use async_trait::async_trait;
use rustls::{server::ClientHello, sign::CertifiedKey};
use crate::types::tls::{Cert, Pem};
#[async_trait]
pub trait ProvidesCertificates: Sync + Send + std::fmt::Debug {
async fn get_certificates(&self) -> Result<Vec<Pem>, Error>;
}
pub trait StoresCertificates<T: Clone + Send + Sync>: Send + Sync {
fn store(&self, cert_list: Vec<Cert<T>>) -> Result<(), Error>;
}
pub trait ResolvesServerCert: Debug + Send + Sync {
fn resolve(&self, client_hello: &ClientHello) -> Option<Arc<CertifiedKey>>;
fn resolve_any(&self) -> Option<Arc<CertifiedKey>> {
None
}
}