use std::sync::Arc;
use crate::certificate::{Certificate, csr::CertificateSigningRequest};
pub type BoxErr = Box<dyn std::error::Error + Send + Sync + 'static>;
#[derive(Debug, thiserror::Error)]
pub enum IssueError {
#[error("retryable request error: {0}")]
Retryable(BoxErr),
#[error("fatal request error: {0}")]
Fatal(BoxErr),
}
pub trait CertIssuer: Send + Sync + std::fmt::Debug {
fn issue_cert_for(
&self,
csr: &CertificateSigningRequest,
) -> impl Future<Output = Result<Certificate, IssueError>> + Send;
}
impl<T> CertIssuer for Arc<T>
where
T: CertIssuer,
{
fn issue_cert_for(
&self,
csr: &CertificateSigningRequest,
) -> impl Future<Output = Result<Certificate, IssueError>> + Send {
T::issue_cert_for(self, csr)
}
}