use iri_rfc3987::Iri;
use crate::StructuralModelError;
const KIND_LANGUAGE_TAG: &str = "language tag";
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum OwlLiteral {
Typed {
lexical: String,
datatype: Iri<String>,
},
LanguageTagged {
lexical: String,
language: String,
},
}
impl OwlLiteral {
#[must_use]
pub fn typed(lexical: impl Into<String>, datatype: Iri<String>) -> Self {
Self::Typed {
lexical: lexical.into(),
datatype,
}
}
pub fn language_tagged(
lexical: impl Into<String>,
language: impl Into<String>,
) -> Result<Self, StructuralModelError> {
let language = language.into();
if language.is_empty() {
return Err(StructuralModelError::Empty {
kind: KIND_LANGUAGE_TAG,
});
}
Ok(Self::LanguageTagged {
lexical: lexical.into(),
language,
})
}
}