use async_trait::async_trait;
use papaya::HashMapRef;
use std::{error::Error, hash::RandomState};
use super::certificates::Certificate;
#[async_trait]
pub trait Store: Send + Sync + 'static {
async fn get_certificate(&self, domain: &str) -> Option<Certificate>;
async fn set_certificate(&self, domain: &str, cert: Certificate) -> Result<(), Box<dyn Error>>;
async fn get_certificates(
&self,
) -> HashMapRef<'_, String, Certificate, RandomState, seize::LocalGuard<'_>>;
async fn get_challenge(&self, domain: &str) -> Option<(String, String)>;
async fn set_challenge(
&self,
domain: &str,
token: String,
proof: String,
) -> Result<(), Box<dyn Error>>;
}