1use crate::{ffi,Array,Node};
7use glib::{translate::*};
8
9glib::wrapper! {
10 #[derive(Debug, PartialOrd, Ord)]
11 pub struct Object(Shared<ffi::JsonObject>);
12
13 match fn {
14 ref => |ptr| ffi::json_object_ref(ptr),
15 unref => |ptr| ffi::json_object_unref(ptr),
16 type_ => || ffi::json_object_get_type(),
17 }
18}
19
20impl Object {
21 #[doc(alias = "json_object_new")]
22 pub fn new() -> Object {
23 assert_initialized_main_thread!();
24 unsafe {
25 from_glib_full(ffi::json_object_new())
26 }
27 }
28
29 #[doc(alias = "json_object_dup_member")]
30 pub fn dup_member(&self, member_name: &str) -> Option<Node> {
31 unsafe {
32 from_glib_full(ffi::json_object_dup_member(self.to_glib_none().0, member_name.to_glib_none().0))
33 }
34 }
35
36 #[cfg(feature = "v1_2")]
37 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
38 #[doc(alias = "json_object_equal")]
39 fn equal(&self, b: &Object) -> bool {
40 unsafe {
41 from_glib(ffi::json_object_equal(ToGlibPtr::<*mut ffi::JsonObject>::to_glib_none(self).0 as glib::ffi::gconstpointer, ToGlibPtr::<*mut ffi::JsonObject>::to_glib_none(b).0 as glib::ffi::gconstpointer))
42 }
43 }
44
45 #[doc(alias = "json_object_foreach_member")]
46 pub fn foreach_member<P: FnMut(&Object, &str, &Node)>(&self, func: P) {
47 let mut func_data: P = func;
48 unsafe extern "C" fn func_func<P: FnMut(&Object, &str, &Node)>(object: *mut ffi::JsonObject, member_name: *const std::ffi::c_char, member_node: *mut ffi::JsonNode, user_data: glib::ffi::gpointer) {
49 let object = from_glib_borrow(object);
50 let member_name: Borrowed<glib::GString> = from_glib_borrow(member_name);
51 let member_node = from_glib_borrow(member_node);
52 let callback = user_data as *mut P;
53 (*callback)(&object, member_name.as_str(), &member_node)
54 }
55 let func = Some(func_func::<P> as _);
56 let super_callback0: &mut P = &mut func_data;
57 unsafe {
58 ffi::json_object_foreach_member(self.to_glib_none().0, func, super_callback0 as *mut _ as *mut _);
59 }
60 }
61
62 #[doc(alias = "json_object_get_array_member")]
63 #[doc(alias = "get_array_member")]
64 pub fn array_member(&self, member_name: &str) -> Option<Array> {
65 unsafe {
66 from_glib_none(ffi::json_object_get_array_member(self.to_glib_none().0, member_name.to_glib_none().0))
67 }
68 }
69
70 #[doc(alias = "json_object_get_boolean_member")]
71 #[doc(alias = "get_boolean_member")]
72 pub fn is_boolean_member(&self, member_name: &str) -> bool {
73 unsafe {
74 from_glib(ffi::json_object_get_boolean_member(self.to_glib_none().0, member_name.to_glib_none().0))
75 }
76 }
77
78 #[cfg(feature = "v1_6")]
79 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
80 #[doc(alias = "json_object_get_boolean_member_with_default")]
81 #[doc(alias = "get_boolean_member_with_default")]
82 pub fn is_boolean_member_with_default(&self, member_name: &str, default_value: bool) -> bool {
83 unsafe {
84 from_glib(ffi::json_object_get_boolean_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value.into_glib()))
85 }
86 }
87
88 #[doc(alias = "json_object_get_double_member")]
89 #[doc(alias = "get_double_member")]
90 pub fn double_member(&self, member_name: &str) -> f64 {
91 unsafe {
92 ffi::json_object_get_double_member(self.to_glib_none().0, member_name.to_glib_none().0)
93 }
94 }
95
96 #[cfg(feature = "v1_6")]
97 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
98 #[doc(alias = "json_object_get_double_member_with_default")]
99 #[doc(alias = "get_double_member_with_default")]
100 pub fn double_member_with_default(&self, member_name: &str, default_value: f64) -> f64 {
101 unsafe {
102 ffi::json_object_get_double_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value)
103 }
104 }
105
106 #[doc(alias = "json_object_get_int_member")]
107 #[doc(alias = "get_int_member")]
108 pub fn int_member(&self, member_name: &str) -> i64 {
109 unsafe {
110 ffi::json_object_get_int_member(self.to_glib_none().0, member_name.to_glib_none().0)
111 }
112 }
113
114 #[cfg(feature = "v1_6")]
115 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
116 #[doc(alias = "json_object_get_int_member_with_default")]
117 #[doc(alias = "get_int_member_with_default")]
118 pub fn int_member_with_default(&self, member_name: &str, default_value: i64) -> i64 {
119 unsafe {
120 ffi::json_object_get_int_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value)
121 }
122 }
123
124 #[doc(alias = "json_object_get_member")]
125 #[doc(alias = "get_member")]
126 pub fn member(&self, member_name: &str) -> Option<Node> {
127 unsafe {
128 from_glib_none(ffi::json_object_get_member(self.to_glib_none().0, member_name.to_glib_none().0))
129 }
130 }
131
132 #[doc(alias = "json_object_get_members")]
133 #[doc(alias = "get_members")]
134 pub fn members(&self) -> Vec<glib::GString> {
135 unsafe {
136 FromGlibPtrContainer::from_glib_container(ffi::json_object_get_members(self.to_glib_none().0))
137 }
138 }
139
140 #[doc(alias = "json_object_get_null_member")]
141 #[doc(alias = "get_null_member")]
142 pub fn is_null_member(&self, member_name: &str) -> bool {
143 unsafe {
144 from_glib(ffi::json_object_get_null_member(self.to_glib_none().0, member_name.to_glib_none().0))
145 }
146 }
147
148 #[doc(alias = "json_object_get_object_member")]
149 #[doc(alias = "get_object_member")]
150#[must_use]
151 pub fn object_member(&self, member_name: &str) -> Option<Object> {
152 unsafe {
153 from_glib_none(ffi::json_object_get_object_member(self.to_glib_none().0, member_name.to_glib_none().0))
154 }
155 }
156
157 #[doc(alias = "json_object_get_size")]
158 #[doc(alias = "get_size")]
159 pub fn size(&self) -> u32 {
160 unsafe {
161 ffi::json_object_get_size(self.to_glib_none().0)
162 }
163 }
164
165 #[doc(alias = "json_object_get_string_member")]
166 #[doc(alias = "get_string_member")]
167 pub fn string_member(&self, member_name: &str) -> glib::GString {
168 unsafe {
169 from_glib_none(ffi::json_object_get_string_member(self.to_glib_none().0, member_name.to_glib_none().0))
170 }
171 }
172
173 #[cfg(feature = "v1_6")]
174 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
175 #[doc(alias = "json_object_get_string_member_with_default")]
176 #[doc(alias = "get_string_member_with_default")]
177 pub fn string_member_with_default(&self, member_name: &str, default_value: &str) -> glib::GString {
178 unsafe {
179 from_glib_none(ffi::json_object_get_string_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value.to_glib_none().0))
180 }
181 }
182
183 #[doc(alias = "json_object_get_values")]
184 #[doc(alias = "get_values")]
185 pub fn values(&self) -> Vec<Node> {
186 unsafe {
187 FromGlibPtrContainer::from_glib_container(ffi::json_object_get_values(self.to_glib_none().0))
188 }
189 }
190
191 #[doc(alias = "json_object_has_member")]
192 pub fn has_member(&self, member_name: &str) -> bool {
193 unsafe {
194 from_glib(ffi::json_object_has_member(self.to_glib_none().0, member_name.to_glib_none().0))
195 }
196 }
197
198 #[cfg(feature = "v1_2")]
199 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
200 #[doc(alias = "json_object_hash")]
201 fn hash(&self) -> u32 {
202 unsafe {
203 ffi::json_object_hash(ToGlibPtr::<*mut ffi::JsonObject>::to_glib_none(self).0 as glib::ffi::gconstpointer)
204 }
205 }
206
207 #[cfg(feature = "v1_2")]
208 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
209 #[doc(alias = "json_object_is_immutable")]
210 pub fn is_immutable(&self) -> bool {
211 unsafe {
212 from_glib(ffi::json_object_is_immutable(self.to_glib_none().0))
213 }
214 }
215
216 #[doc(alias = "json_object_remove_member")]
217 pub fn remove_member(&self, member_name: &str) {
218 unsafe {
219 ffi::json_object_remove_member(self.to_glib_none().0, member_name.to_glib_none().0);
220 }
221 }
222
223 #[cfg(feature = "v1_2")]
224 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
225 #[doc(alias = "json_object_seal")]
226 pub fn seal(&self) {
227 unsafe {
228 ffi::json_object_seal(self.to_glib_none().0);
229 }
230 }
231
232 #[doc(alias = "json_object_set_array_member")]
233 pub fn set_array_member(&self, member_name: &str, value: Array) {
234 unsafe {
235 ffi::json_object_set_array_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib_ptr());
236 }
237 }
238
239 #[doc(alias = "json_object_set_boolean_member")]
240 pub fn set_boolean_member(&self, member_name: &str, value: bool) {
241 unsafe {
242 ffi::json_object_set_boolean_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib());
243 }
244 }
245
246 #[doc(alias = "json_object_set_double_member")]
247 pub fn set_double_member(&self, member_name: &str, value: f64) {
248 unsafe {
249 ffi::json_object_set_double_member(self.to_glib_none().0, member_name.to_glib_none().0, value);
250 }
251 }
252
253 #[doc(alias = "json_object_set_int_member")]
254 pub fn set_int_member(&self, member_name: &str, value: i64) {
255 unsafe {
256 ffi::json_object_set_int_member(self.to_glib_none().0, member_name.to_glib_none().0, value);
257 }
258 }
259
260 #[doc(alias = "json_object_set_member")]
261 pub fn set_member(&self, member_name: &str, node: Node) {
262 unsafe {
263 ffi::json_object_set_member(self.to_glib_none().0, member_name.to_glib_none().0, node.into_glib_ptr());
264 }
265 }
266
267 #[doc(alias = "json_object_set_null_member")]
268 pub fn set_null_member(&self, member_name: &str) {
269 unsafe {
270 ffi::json_object_set_null_member(self.to_glib_none().0, member_name.to_glib_none().0);
271 }
272 }
273
274 #[doc(alias = "json_object_set_object_member")]
275 pub fn set_object_member(&self, member_name: &str, value: Object) {
276 unsafe {
277 ffi::json_object_set_object_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib_ptr());
278 }
279 }
280
281 #[doc(alias = "json_object_set_string_member")]
282 pub fn set_string_member(&self, member_name: &str, value: &str) {
283 unsafe {
284 ffi::json_object_set_string_member(self.to_glib_none().0, member_name.to_glib_none().0, value.to_glib_none().0);
285 }
286 }
287}
288
289impl Default for Object {
290 fn default() -> Self {
291 Self::new()
292 }
293 }
294
295#[cfg(feature = "v1_2")]
296#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
297impl PartialEq for Object {
298 #[inline]
299 fn eq(&self, other: &Self) -> bool {
300 self.equal(other)
301 }
302}
303#[cfg(feature = "v1_2")]
304#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
305
306impl Eq for Object {}
307
308#[cfg(feature = "v1_2")]
309#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
310impl std::hash::Hash for Object {
311 #[inline]
312 fn hash<H>(&self, state: &mut H) where H: std::hash::Hasher {
313 std::hash::Hash::hash(&self.hash(), state)
314 }
315}