use serde::{Deserialize, Serialize};
#[derive(
Debug,
Clone,
Deserialize,
Serialize,
PartialEq,
Hash,
Eq,
strum::AsRefStr,
strum::Display,
strum::EnumString,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[cfg_attr(
feature = "sqlx",
sqlx(type_name = "association_label", rename_all = "snake_case")
)]
pub enum AssociationLabel {
OwnedBy,
OwnerOf,
DependsOn,
DependencyOf,
ParentOf,
ChildOf,
HasPart,
PartOf,
References,
ReferencedBy,
Tagged,
TaggedBy,
}
impl AssociationLabel {
pub fn inverse(&self) -> Option<Self> {
match self {
AssociationLabel::HasPart => Some(AssociationLabel::PartOf),
AssociationLabel::PartOf => Some(AssociationLabel::HasPart),
AssociationLabel::DependsOn => Some(AssociationLabel::DependencyOf),
AssociationLabel::DependencyOf => Some(AssociationLabel::DependsOn),
AssociationLabel::ParentOf => Some(AssociationLabel::ChildOf),
AssociationLabel::ChildOf => Some(AssociationLabel::ParentOf),
AssociationLabel::References => Some(AssociationLabel::ReferencedBy),
AssociationLabel::ReferencedBy => Some(AssociationLabel::References),
AssociationLabel::OwnedBy => Some(AssociationLabel::OwnerOf),
AssociationLabel::OwnerOf => Some(AssociationLabel::OwnedBy),
AssociationLabel::Tagged => Some(AssociationLabel::TaggedBy),
AssociationLabel::TaggedBy => Some(AssociationLabel::Tagged),
}
}
}