use super::TrustStore;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum StoreKind {
Signature,
Timestamp,
Svt,
}
impl std::fmt::Display for StoreKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
StoreKind::Signature => write!(f, "sig"),
StoreKind::Timestamp => write!(f, "tsa"),
StoreKind::Svt => write!(f, "svt"),
}
}
}
#[derive(Debug, Clone)]
pub struct TrustStoreSet {
sig: Option<TrustStore>,
tsa: Option<TrustStore>,
svt: Option<TrustStore>,
}
impl TrustStoreSet {
pub fn new() -> Self {
Self {
sig: None,
tsa: None,
svt: None,
}
}
pub fn with_sig_store(mut self, store: TrustStore) -> Self {
self.sig = Some(store);
self
}
pub fn with_tsa_store(mut self, store: TrustStore) -> Self {
self.tsa = Some(store);
self
}
pub fn with_svt_store(mut self, store: TrustStore) -> Self {
self.svt = Some(store);
self
}
pub fn get(&self, kind: StoreKind) -> Option<&TrustStore> {
match kind {
StoreKind::Signature => self.sig.as_ref(),
StoreKind::Timestamp => self.tsa.as_ref(),
StoreKind::Svt => self.svt.as_ref(),
}
}
pub fn get_mut(&mut self, kind: StoreKind) -> Option<&mut TrustStore> {
match kind {
StoreKind::Signature => self.sig.as_mut(),
StoreKind::Timestamp => self.tsa.as_mut(),
StoreKind::Svt => self.svt.as_mut(),
}
}
pub fn sig(&self) -> Option<&TrustStore> {
self.sig.as_ref()
}
pub fn tsa(&self) -> Option<&TrustStore> {
self.tsa.as_ref()
}
pub fn svt(&self) -> Option<&TrustStore> {
self.svt.as_ref()
}
pub fn has_any(&self) -> bool {
self.sig.is_some() || self.tsa.is_some() || self.svt.is_some()
}
pub fn set(&mut self, kind: StoreKind, store: TrustStore) {
match kind {
StoreKind::Signature => self.sig = Some(store),
StoreKind::Timestamp => self.tsa = Some(store),
StoreKind::Svt => self.svt = Some(store),
}
}
}
impl Default for TrustStoreSet {
fn default() -> Self {
Self::new()
}
}