xsd_parser/models/data/
occurs.rs1use crate::models::schema::{MaxOccurs, MinOccurs};
2
3#[derive(Default, Debug, Clone, Copy, Eq, PartialEq)]
5pub enum Occurs {
6 #[default]
8 None,
9
10 Single,
12
13 Optional,
15
16 DynamicList,
18
19 StaticList(usize),
21}
22
23impl Occurs {
24 #[must_use]
27 pub fn from_occurs(min: MinOccurs, max: MaxOccurs) -> Self {
28 match (min, max) {
29 (0, MaxOccurs::Bounded(0)) => Self::None,
30 (1, MaxOccurs::Bounded(1)) => Self::Single,
31 (0, MaxOccurs::Bounded(1)) => Self::Optional,
32 (a, MaxOccurs::Bounded(b)) if a == b => Self::StaticList(a),
33 (_, _) => Self::DynamicList,
34 }
35 }
36
37 #[must_use]
39 pub fn is_some(&self) -> bool {
40 *self != Self::None
41 }
42
43 #[must_use]
46 pub fn is_direct(&self) -> bool {
47 matches!(self, Self::Single | Self::Optional | Self::StaticList(_))
48 }
49}