1use iref::Iri;
52use static_iref::iri;
53
54pub mod lexical;
56pub(crate) mod utils;
57
58pub mod value;
60
61use lexical::{Lexical, LexicalFormOf};
62pub use value::*;
63
64mod types;
65
66pub use types::*;
67
68pub enum PrimitiveDatatype {
70 String,
71 Boolean,
72 Decimal,
73 Float,
74 Double,
75 Duration,
76 DateTime,
77 Time,
78 Date,
79 GYearMonth,
80 GYear,
81 GMonthDay,
82 GDay,
83 GMonth,
84 HexBinary,
85 Base64Binary,
86 AnyUri,
87 QName,
88 Notation,
89}
90
91pub const XSD_DURATION: &Iri = iri!("http://www.w3.org/2001/XMLSchema#duration");
93
94pub const XSD_DAY_TIME_DURATION: &Iri = iri!("http://www.w3.org/2001/XMLSchema#dayTimeDuration");
96
97pub const XSD_YEAR_MONTH_DURATION: &Iri =
99 iri!("http://www.w3.org/2001/XMLSchema#yearMonthDuration");
100
101pub const XSD_DATE_TIME: &Iri = iri!("http://www.w3.org/2001/XMLSchema#dateTime");
103
104pub const XSD_DATE_TIME_STAMP: &Iri = iri!("http://www.w3.org/2001/XMLSchema#dateTimeStamp");
106
107pub const XSD_TIME: &Iri = iri!("http://www.w3.org/2001/XMLSchema#time");
109
110pub const XSD_DATE: &Iri = iri!("http://www.w3.org/2001/XMLSchema#date");
112
113pub const XSD_G_YEAR_MONTH: &Iri = iri!("http://www.w3.org/2001/XMLSchema#gYearMonth");
115
116pub const XSD_G_YEAR: &Iri = iri!("http://www.w3.org/2001/XMLSchema#gYear");
118
119pub const XSD_G_MONTH_DAY: &Iri = iri!("http://www.w3.org/2001/XMLSchema#gMonthDay");
121
122pub const XSD_G_DAY: &Iri = iri!("http://www.w3.org/2001/XMLSchema#gDay");
124
125pub const XSD_G_MONTH: &Iri = iri!("http://www.w3.org/2001/XMLSchema#gMonth");
127
128pub const XSD_STRING: &Iri = iri!("http://www.w3.org/2001/XMLSchema#string");
130
131pub const XSD_BOOLEAN: &Iri = iri!("http://www.w3.org/2001/XMLSchema#boolean");
133
134pub const XSD_BASE64_BINARY: &Iri = iri!("http://www.w3.org/2001/XMLSchema#base64Binary");
136
137pub const XSD_HEX_BINARY: &Iri = iri!("http://www.w3.org/2001/XMLSchema#hexBinary");
139
140pub const XSD_FLOAT: &Iri = iri!("http://www.w3.org/2001/XMLSchema#float");
142
143pub const XSD_DECIMAL: &Iri = iri!("http://www.w3.org/2001/XMLSchema#decimal");
145
146pub const XSD_DOUBLE: &Iri = iri!("http://www.w3.org/2001/XMLSchema#double");
148
149pub const XSD_ANY_URI: &Iri = iri!("http://www.w3.org/2001/XMLSchema#anyURI");
151
152pub const XSD_Q_NAME: &Iri = iri!("http://www.w3.org/2001/XMLSchema#QName");
154
155pub const XSD_NOTATION: &Iri = iri!("http://www.w3.org/2001/XMLSchema#NOTATION");
157
158pub const XSD_NORMALIZED_STRING: &Iri = iri!("http://www.w3.org/2001/XMLSchema#normalizedString");
160
161pub const XSD_TOKEN: &Iri = iri!("http://www.w3.org/2001/XMLSchema#token");
163
164pub const XSD_LANGUAGE: &Iri = iri!("http://www.w3.org/2001/XMLSchema#language");
166
167pub const XSD_NAME: &Iri = iri!("http://www.w3.org/2001/XMLSchema#Name");
169
170pub const XSD_NMTOKEN: &Iri = iri!("http://www.w3.org/2001/XMLSchema#NMTOKEN");
172
173pub const XSD_NC_NAME: &Iri = iri!("http://www.w3.org/2001/XMLSchema#NCName");
175
176pub const XSD_NMTOKENS: &Iri = iri!("http://www.w3.org/2001/XMLSchema#NMTOKENS");
178
179pub const XSD_ID: &Iri = iri!("http://www.w3.org/2001/XMLSchema#ID");
181
182pub const XSD_IDREF: &Iri = iri!("http://www.w3.org/2001/XMLSchema#IDREF");
184
185pub const XSD_ENTITY: &Iri = iri!("http://www.w3.org/2001/XMLSchema#ENTITY");
187
188pub const XSD_IDREFS: &Iri = iri!("http://www.w3.org/2001/XMLSchema#IDREFS");
190
191pub const XSD_ENTITIES: &Iri = iri!("http://www.w3.org/2001/XMLSchema#ENTITIES");
193
194pub const XSD_INTEGER: &Iri = iri!("http://www.w3.org/2001/XMLSchema#integer");
196
197pub const XSD_NON_POSITIVE_INTEGER: &Iri =
199 iri!("http://www.w3.org/2001/XMLSchema#nonPositiveInteger");
200
201pub const XSD_NEGATIVE_INTEGER: &Iri = iri!("http://www.w3.org/2001/XMLSchema#negativeInteger");
203
204pub const XSD_LONG: &Iri = iri!("http://www.w3.org/2001/XMLSchema#long");
206
207pub const XSD_INT: &Iri = iri!("http://www.w3.org/2001/XMLSchema#int");
209
210pub const XSD_SHORT: &Iri = iri!("http://www.w3.org/2001/XMLSchema#short");
212
213pub const XSD_BYTE: &Iri = iri!("http://www.w3.org/2001/XMLSchema#byte");
215
216pub const XSD_NON_NEGATIVE_INTEGER: &Iri =
218 iri!("http://www.w3.org/2001/XMLSchema#nonNegativeInteger");
219
220pub const XSD_UNSIGNED_LONG: &Iri = iri!("http://www.w3.org/2001/XMLSchema#unsignedLong");
222
223pub const XSD_UNSIGNED_INT: &Iri = iri!("http://www.w3.org/2001/XMLSchema#unsignedInt");
225
226pub const XSD_UNSIGNED_SHORT: &Iri = iri!("http://www.w3.org/2001/XMLSchema#unsignedShort");
228
229pub const XSD_UNSIGNED_BYTE: &Iri = iri!("http://www.w3.org/2001/XMLSchema#unsignedByte");
231
232pub const XSD_POSITIVE_INTEGER: &Iri = iri!("http://www.w3.org/2001/XMLSchema#positiveInteger");
234
235pub trait ParseXsd: Sized {
237 type LexicalForm: LexicalFormOf<Self> + ?Sized;
238
239 fn parse_xsd(lexical_value: &str) -> ParseXsdResult<Self, Self::LexicalForm> {
240 Self::LexicalForm::parse(lexical_value)
241 .map_err(ParseXsdError::InvalidLexicalForm)?
242 .try_as_value()
243 .map_err(ParseXsdError::InvalidValue)
244 }
245}
246
247pub type ParseXsdResult<T, L> =
249 Result<T, ParseXsdError<<L as Lexical>::Error, <L as LexicalFormOf<T>>::ValueError>>;
250
251pub enum ParseXsdError<L, V> {
253 InvalidLexicalForm(L),
254 InvalidValue(V),
255}