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 })
}
}