use serde::{Deserialize, Serialize};
use std::collections::BTreeSet;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PublicReadCapability {
Discover,
Browse,
Content,
Search,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(transparent)]
pub struct PublicReadPolicy(BTreeSet<PublicReadCapability>);
impl FromIterator<PublicReadCapability> for PublicReadPolicy {
fn from_iter<T: IntoIterator<Item = PublicReadCapability>>(iter: T) -> Self {
Self(iter.into_iter().collect())
}
}
impl PublicReadPolicy {
pub fn is_private(&self) -> bool {
self.0.is_empty()
}
pub fn allows(&self, capability: PublicReadCapability) -> bool {
self.0.contains(&capability)
}
}