shex_ast/ir/
value_set_value.rs1use 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}