use crate::category::Entity;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Being {
PhysicalEndurant,
SocialObject,
MentalObject,
AbstractObject,
Event,
Process,
Quality,
}
impl Entity for Being {
fn variants() -> Vec<Self> {
vec![
Self::PhysicalEndurant,
Self::SocialObject,
Self::MentalObject,
Self::AbstractObject,
Self::Event,
Self::Process,
Self::Quality,
]
}
}
impl Being {
pub fn is_endurant(&self) -> bool {
matches!(
self,
Self::PhysicalEndurant | Self::SocialObject | Self::MentalObject | Self::AbstractObject
)
}
pub fn is_perdurant(&self) -> bool {
matches!(self, Self::Event | Self::Process)
}
pub fn is_quality(&self) -> bool {
matches!(self, Self::Quality)
}
pub fn is_non_physical(&self) -> bool {
matches!(
self,
Self::SocialObject | Self::MentalObject | Self::AbstractObject
)
}
pub fn label(&self) -> &'static str {
match self {
Self::PhysicalEndurant => "Physical",
Self::SocialObject => "Social",
Self::MentalObject => "Mental",
Self::AbstractObject => "Abstract",
Self::Event => "Event",
Self::Process => "Process",
Self::Quality => "Quality",
}
}
}