use std::collections::HashSet;
use dpp_domain::AccessTier;
pub trait TrustedIssuerRegistry: Send + Sync {
fn is_trusted_for_tier(&self, issuer_did: &str, tier: AccessTier) -> bool;
}
pub struct StaticTrustedIssuers {
professional_dids: HashSet<String>,
confidential_dids: HashSet<String>,
}
impl StaticTrustedIssuers {
pub fn new(
professional_dids: impl IntoIterator<Item = impl Into<String>>,
confidential_dids: impl IntoIterator<Item = impl Into<String>>,
) -> Self {
Self {
professional_dids: professional_dids.into_iter().map(Into::into).collect(),
confidential_dids: confidential_dids.into_iter().map(Into::into).collect(),
}
}
pub fn single(trusted_did: impl Into<String>) -> Self {
let did = trusted_did.into();
Self {
professional_dids: HashSet::from([did.clone()]),
confidential_dids: HashSet::from([did]),
}
}
}
impl TrustedIssuerRegistry for StaticTrustedIssuers {
fn is_trusted_for_tier(&self, issuer_did: &str, tier: AccessTier) -> bool {
match tier {
AccessTier::Public => true,
AccessTier::Professional => {
self.professional_dids.contains(issuer_did)
|| self.confidential_dids.contains(issuer_did)
}
AccessTier::Confidential => self.confidential_dids.contains(issuer_did),
_ => false,
}
}
}
pub struct AllowAllIssuers;
impl TrustedIssuerRegistry for AllowAllIssuers {
fn is_trusted_for_tier(&self, _issuer_did: &str, _tier: AccessTier) -> bool {
true
}
}