sciforge_parser/yaml/
value.rs1#[derive(Clone, Debug, PartialEq)]
2pub enum YamlValue<'a> {
3 Null,
4 Bool(bool),
5 Number(f64),
6 String(&'a str),
7 Sequence(Vec<YamlValue<'a>>),
8 Mapping(Vec<(&'a str, YamlValue<'a>)>),
9}
10
11impl<'a> YamlValue<'a> {
12 pub fn is_mapping(&self) -> bool {
13 matches!(self, YamlValue::Mapping(_))
14 }
15
16 pub fn is_sequence(&self) -> bool {
17 matches!(self, YamlValue::Sequence(_))
18 }
19
20 pub fn as_str(&self) -> Option<&'a str> {
21 match self {
22 YamlValue::String(v) => Some(v),
23 _ => None,
24 }
25 }
26
27 pub fn as_bool(&self) -> Option<bool> {
28 match self {
29 YamlValue::Bool(v) => Some(*v),
30 _ => None,
31 }
32 }
33
34 pub fn as_number(&self) -> Option<f64> {
35 match self {
36 YamlValue::Number(v) => Some(*v),
37 _ => None,
38 }
39 }
40
41 pub fn as_u32(&self) -> Option<u32> {
42 self.as_number().map(|n| n as u32)
43 }
44
45 pub fn get(&self, key: &str) -> Option<&YamlValue<'a>> {
46 match self {
47 YamlValue::Mapping(entries) => entries.iter().find(|(k, _)| *k == key).map(|(_, v)| v),
48 _ => None,
49 }
50 }
51
52 pub fn items(&self) -> &[YamlValue<'a>] {
53 match self {
54 YamlValue::Sequence(items) => items,
55 _ => &[],
56 }
57 }
58
59 pub fn entries(&self) -> &[(&'a str, YamlValue<'a>)] {
60 match self {
61 YamlValue::Mapping(entries) => entries,
62 _ => &[],
63 }
64 }
65
66 pub fn is_null(&self) -> bool {
67 matches!(self, YamlValue::Null)
68 }
69}