use crate::{config::VerifierConfig, jwks::IssuerJwks, replay::ReplayStore};
use std::sync::Arc;
pub struct Missing;
#[derive(Clone)]
pub struct DevSig<R = Missing> {
pub config: VerifierConfig,
pub jwks: Arc<IssuerJwks>,
pub replay_store: R,
}
impl DevSig<Missing> {
pub fn builder() -> DevSigBuilder<Missing> {
DevSigBuilder {
config: None,
jwks: None,
replay_store: Missing,
}
}
}
pub struct DevSigBuilder<R> {
config: Option<VerifierConfig>,
jwks: Option<Arc<IssuerJwks>>,
replay_store: R,
}
impl<R> DevSigBuilder<R> {
pub fn config(mut self, config: VerifierConfig) -> Self {
self.config = Some(config);
self
}
pub fn jwks(mut self, jwks: Arc<IssuerJwks>) -> Self {
self.jwks = Some(jwks);
self
}
}
impl DevSigBuilder<Missing> {
pub fn replay_store(
self,
replay_store: Arc<dyn ReplayStore>,
) -> DevSigBuilder<Arc<dyn ReplayStore>> {
DevSigBuilder {
config: self.config,
jwks: self.jwks,
replay_store,
}
}
}
impl DevSigBuilder<Arc<dyn ReplayStore>> {
pub fn build(self) -> DevSig<Arc<dyn ReplayStore>> {
DevSig {
config: self.config.expect("config must be set on DevSigBuilder"),
jwks: self.jwks.expect("jwks must be set on DevSigBuilder"),
replay_store: self.replay_store,
}
}
}