shex_ast/ir/
value_set_value.rs

1use super::object_value::ObjectValue;
2use iri_s::IriS;
3use srdf::Object;
4use std::fmt::Display;
5
6#[derive(Debug, PartialEq, Eq, Clone)]
7pub enum ValueSetValue {
8    IriStem {
9        stem: IriS,
10    },
11    IriStemRange {
12        stem: IriRefOrWildcard,
13        exclusions: Option<Vec<StringOrIriStem>>,
14    },
15    LiteralStem {
16        stem: String,
17    },
18    LiteralStemRange {
19        stem: StringOrWildcard,
20        exclusions: Option<Vec<StringOrLiteralStem>>,
21    },
22    Language {
23        language_tag: String,
24    },
25    LanguageStem,
26    LanguageStemRange,
27    ObjectValue(ObjectValue),
28}
29
30#[derive(PartialEq, Eq, Clone, Debug)]
31pub enum StringOrLiteralStem {
32    String(String),
33    LiteralStem { stem: String },
34}
35
36#[derive(PartialEq, Eq, Clone, Debug)]
37pub enum IriRefOrWildcard {
38    IriRef(IriS),
39    Wildcard { type_: String },
40}
41
42#[derive(PartialEq, Eq, Clone, Debug)]
43pub enum StringOrWildcard {
44    String(String),
45    Wildcard { type_: String },
46}
47
48#[derive(PartialEq, Eq, Clone, Debug)]
49pub enum StringOrIriStem {
50    String(String),
51    IriStem { stem: String },
52}
53
54impl ValueSetValue {
55    pub fn match_value(&self, object: &Object) -> bool {
56        match self {
57            ValueSetValue::IriStem { .. } => todo!(),
58            ValueSetValue::IriStemRange { .. } => todo!(),
59            ValueSetValue::LiteralStem { .. } => todo!(),
60            ValueSetValue::LiteralStemRange { .. } => todo!(),
61            ValueSetValue::Language { .. } => todo!(),
62            ValueSetValue::LanguageStem => todo!(),
63            ValueSetValue::LanguageStemRange => todo!(),
64            ValueSetValue::ObjectValue(v) => v.match_value(object),
65        }
66    }
67}
68
69impl Display for ValueSetValue {
70    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
71        match self {
72            ValueSetValue::IriStem { .. } => todo!(),
73            ValueSetValue::IriStemRange { .. } => todo!(),
74            ValueSetValue::LiteralStem { .. } => todo!(),
75            ValueSetValue::LiteralStemRange { .. } => todo!(),
76            ValueSetValue::Language { .. } => todo!(),
77            ValueSetValue::LanguageStem => todo!(),
78            ValueSetValue::LanguageStemRange => todo!(),
79            ValueSetValue::ObjectValue(ov) => write!(f, "{ov}"),
80        }
81    }
82}