#[cfg(feature = "utoipa")]
use utoipa::ToSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub enum Visibility {
Private,
Unlisted,
Public,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub enum Joinability {
Invite,
Public,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub struct Access {
pub visibility: Visibility,
pub joinability: Joinability,
}
impl Visibility {
pub fn inherit_from(&self, parent: &Visibility) -> Visibility {
*self.max(parent)
}
}
impl Joinability {
pub fn inherit_from(&self, parent: &Joinability) -> Joinability {
*self.max(parent)
}
}
impl Access {
pub fn inherit_from(&self, parent: &Access) -> Access {
Access {
visibility: self.visibility.inherit_from(&parent.visibility),
joinability: self.joinability.inherit_from(&parent.joinability),
}
}
}