owl_structural_model/
literal.rs1use iri_rfc3987::Iri;
4
5use crate::StructuralModelError;
6
7const KIND_LANGUAGE_TAG: &str = "language tag";
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
11pub enum OwlLiteral {
12 Typed {
14 lexical: String,
16 datatype: Iri<String>,
18 },
19 LanguageTagged {
21 lexical: String,
23 language: String,
25 },
26}
27
28impl OwlLiteral {
29 #[must_use]
31 pub fn typed(lexical: impl Into<String>, datatype: Iri<String>) -> Self {
32 Self::Typed {
33 lexical: lexical.into(),
34 datatype,
35 }
36 }
37
38 pub fn language_tagged(
44 lexical: impl Into<String>,
45 language: impl Into<String>,
46 ) -> Result<Self, StructuralModelError> {
47 let language = language.into();
48 if language.is_empty() {
49 return Err(StructuralModelError::Empty {
50 kind: KIND_LANGUAGE_TAG,
51 });
52 }
53 Ok(Self::LanguageTagged {
54 lexical: lexical.into(),
55 language,
56 })
57 }
58}