use iri_rfc3987::Iri;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum EntityKind {
Class,
ObjectProperty,
DataProperty,
AnnotationProperty,
NamedIndividual,
Datatype,
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub struct Entity {
kind: EntityKind,
iri: Iri<String>,
}
impl Entity {
#[must_use]
pub fn new(kind: EntityKind, iri: Iri<String>) -> Self {
Self { kind, iri }
}
#[must_use]
pub fn class(iri: Iri<String>) -> Self {
Self::new(EntityKind::Class, iri)
}
#[must_use]
pub fn object_property(iri: Iri<String>) -> Self {
Self::new(EntityKind::ObjectProperty, iri)
}
#[must_use]
pub fn data_property(iri: Iri<String>) -> Self {
Self::new(EntityKind::DataProperty, iri)
}
#[must_use]
pub fn annotation_property(iri: Iri<String>) -> Self {
Self::new(EntityKind::AnnotationProperty, iri)
}
#[must_use]
pub fn named_individual(iri: Iri<String>) -> Self {
Self::new(EntityKind::NamedIndividual, iri)
}
#[must_use]
pub fn datatype(iri: Iri<String>) -> Self {
Self::new(EntityKind::Datatype, iri)
}
#[must_use]
pub fn kind(&self) -> EntityKind {
self.kind
}
#[must_use]
pub fn iri(&self) -> &Iri<String> {
&self.iri
}
}