json_value/json/
mod.rs

1use crate::{JsonMaybeArray, JsonMaybeObject, JsonValueCheck, JsonValueWrap};
2use serde_json::{Map, Value};
3
4impl JsonValueWrap for Value {
5    fn as_boolean(&self) -> Option<&bool> {
6        match self {
7            Self::Bool(s) => Some(s),
8            _ => None,
9        }
10    }
11
12    fn as_array(&self) -> Option<&Vec<Self>> {
13        match self {
14            Self::Array(s) => Some(s),
15            _ => None,
16        }
17    }
18
19    fn as_string(&self) -> Option<&String> {
20        match self {
21            Self::String(s) => Some(s),
22            _ => None,
23        }
24    }
25
26    fn as_object(&self) -> Option<&Map<String, Value>> {
27        match self {
28            Self::Object(s) => Some(s),
29            _ => None,
30        }
31    }
32
33    fn into_boolean(self) -> Option<bool> {
34        match self {
35            Self::Bool(s) => Some(s),
36            _ => None,
37        }
38    }
39
40    fn into_string(self) -> Option<String> {
41        match self {
42            Self::String(s) => Some(s),
43            _ => None,
44        }
45    }
46
47    fn into_array(self) -> Option<Vec<Self>> {
48        match self {
49            Self::Array(s) => Some(s),
50            _ => None,
51        }
52    }
53
54    fn into_object(self) -> Option<Map<String, Self>> {
55        match self {
56            Self::Object(o) => Some(o),
57            _ => None,
58        }
59    }
60}
61
62impl JsonValueCheck for Value {
63    fn is_null(&self) -> bool {
64        matches!(self, Self::Null)
65    }
66
67    fn is_empty(&self) -> bool {
68        match self {
69            Self::Array(s) if s.is_empty() => true,
70            Self::Object(s) if s.is_empty() => true,
71            _ => false,
72        }
73    }
74}
75
76impl JsonMaybeArray for Value {
77    fn get_index(&self, index: usize) -> Option<&Self> {
78        match self {
79            Self::Array(s) => s.get(index),
80            _ => None,
81        }
82    }
83
84    fn mut_index(&mut self, index: usize) -> Option<&mut Self> {
85        match self {
86            Self::Array(s) => s.get_mut(index),
87            _ => None,
88        }
89    }
90}
91
92impl JsonMaybeObject for Value {
93    fn get_key(&self, key: &str) -> Option<&Self> {
94        match self {
95            Self::Object(s) => s.get(key),
96            _ => None,
97        }
98    }
99
100    fn mut_key(&mut self, key: &str) -> Option<&mut Self> {
101        match self {
102            Self::Object(s) => s.get_mut(key),
103            _ => None,
104        }
105    }
106
107    fn extract_key(&mut self, key: &str) -> Option<Value> {
108        match self {
109            Self::Object(s) => s.remove(key),
110            _ => None,
111        }
112    }
113}