use serde::{Deserialize, Serialize};
use super::class::{DISCLOSURE_ORDER, Disclosure, disclosure_key};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum Audience {
Public,
LegitimateInterest,
Authority,
}
impl Audience {
#[must_use]
pub fn disclosure_set(self) -> Vec<Disclosure> {
DISCLOSURE_ORDER
.iter()
.copied()
.filter(|d| self.may_see(*d))
.collect()
}
#[must_use]
pub fn disclosure_key(self) -> String {
disclosure_key(&self.disclosure_set())
}
#[must_use]
pub const fn may_see(self, disclosure: Disclosure) -> bool {
matches!(
(self, disclosure),
(Self::Public, Disclosure::Public)
| (
Self::LegitimateInterest,
Disclosure::Public | Disclosure::Restricted | Disclosure::Individual
)
| (
Self::Authority,
Disclosure::Public | Disclosure::Restricted | Disclosure::Conformity
)
)
}
}