json_glib/auto/object.rs
1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir
3// from gtk-girs (https://github.com/gtk-rs/gir-files)
4// DO NOT EDIT
5
6use crate::{ffi,Array,Node};
7use glib::{translate::*};
8
9glib::wrapper! {
10 /// `JsonObject` is the representation of the object type inside JSON.
11 ///
12 /// A `JsonObject` contains [`Node`][crate::Node] "members", which may contain
13 /// fundamental types, arrays or other objects; each member of an object is
14 /// accessed using a unique string, or "name".
15 ///
16 /// Since objects can be arbitrarily big, copying them can be expensive; for
17 /// this reason they are reference counted. You can control the lifetime of
18 /// a `JsonObject` using `Json::Object::ref()` and `Json::Object::unref()`.
19 ///
20 /// To add or overwrite a member with a given name, use [`set_member()`][Self::set_member()].
21 ///
22 /// To extract a member with a given name, use [`member()`][Self::member()].
23 ///
24 /// To retrieve the list of members, use [`members()`][Self::members()].
25 ///
26 /// To retrieve the size of the object (that is, the number of members it has),
27 /// use [`size()`][Self::size()].
28 #[derive(Debug, PartialOrd, Ord)]
29 pub struct Object(Shared<ffi::JsonObject>);
30
31 match fn {
32 ref => |ptr| ffi::json_object_ref(ptr),
33 unref => |ptr| ffi::json_object_unref(ptr),
34 type_ => || ffi::json_object_get_type(),
35 }
36}
37
38impl Object {
39 /// Creates a new object.
40 ///
41 /// # Returns
42 ///
43 /// the newly created object
44 #[doc(alias = "json_object_new")]
45 pub fn new() -> Object {
46 assert_initialized_main_thread!();
47 unsafe {
48 from_glib_full(ffi::json_object_new())
49 }
50 }
51
52 /// Retrieves a copy of the value of the given member inside an object.
53 /// ## `member_name`
54 /// the name of the JSON object member to access
55 ///
56 /// # Returns
57 ///
58 /// a copy of the value for the
59 /// requested object member
60 #[doc(alias = "json_object_dup_member")]
61 pub fn dup_member(&self, member_name: &str) -> Option<Node> {
62 unsafe {
63 from_glib_full(ffi::json_object_dup_member(self.to_glib_none().0, member_name.to_glib_none().0))
64 }
65 }
66
67 #[cfg(feature = "v1_2")]
68 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
69 #[doc(alias = "json_object_equal")]
70 fn equal(&self, b: &Object) -> bool {
71 unsafe {
72 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))
73 }
74 }
75
76 /// Iterates over all members of @self and calls @func on
77 /// each one of them.
78 ///
79 /// It is safe to change the value of a member of the oobject
80 /// from within the iterator function, but it is not safe to add or
81 /// remove members from the object.
82 ///
83 /// The order in which the object members are iterated is the
84 /// insertion order.
85 /// ## `func`
86 /// the function to be called on each member
87 #[doc(alias = "json_object_foreach_member")]
88 pub fn foreach_member<P: FnMut(&Object, &str, &Node)>(&self, func: P) {
89 let mut func_data: P = func;
90 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) {
91 let object = from_glib_borrow(object);
92 let member_name: Borrowed<glib::GString> = from_glib_borrow(member_name);
93 let member_node = from_glib_borrow(member_node);
94 let callback = user_data as *mut P;
95 (*callback)(&object, member_name.as_str(), &member_node)
96 }
97 let func = Some(func_func::<P> as _);
98 let super_callback0: &mut P = &mut func_data;
99 unsafe {
100 ffi::json_object_foreach_member(self.to_glib_none().0, func, super_callback0 as *mut _ as *mut _);
101 }
102 }
103
104 /// Convenience function that retrieves the array
105 /// stored in @member_name of @self. It is an error to specify a
106 /// @member_name which does not exist or which holds a non-`null`, non-array
107 /// value.
108 ///
109 /// If @member_name contains `null`, then this function will return `NULL`.
110 ///
111 /// See also: [`member()`][Self::member()], [`has_member()`][Self::has_member()]
112 /// ## `member_name`
113 /// the name of the member
114 ///
115 /// # Returns
116 ///
117 /// the array inside the object's member
118 #[doc(alias = "json_object_get_array_member")]
119 #[doc(alias = "get_array_member")]
120 pub fn array_member(&self, member_name: &str) -> Option<Array> {
121 unsafe {
122 from_glib_none(ffi::json_object_get_array_member(self.to_glib_none().0, member_name.to_glib_none().0))
123 }
124 }
125
126 /// Convenience function that retrieves the boolean value
127 /// stored in @member_name of @self. It is an error to specify a
128 /// @member_name which does not exist or which holds a non-scalar,
129 /// non-`null` value.
130 ///
131 /// See also: [`is_boolean_member_with_default()`][Self::is_boolean_member_with_default()],
132 /// [`member()`][Self::member()], [`has_member()`][Self::has_member()]
133 /// ## `member_name`
134 /// the name of the member
135 ///
136 /// # Returns
137 ///
138 /// the boolean value of the object's member
139 #[doc(alias = "json_object_get_boolean_member")]
140 #[doc(alias = "get_boolean_member")]
141 pub fn is_boolean_member(&self, member_name: &str) -> bool {
142 unsafe {
143 from_glib(ffi::json_object_get_boolean_member(self.to_glib_none().0, member_name.to_glib_none().0))
144 }
145 }
146
147 /// Convenience function that retrieves the boolean value
148 /// stored in @member_name of @self.
149 ///
150 /// If @member_name does not exist, does not contain a scalar value,
151 /// or contains `null`, then @default_value is returned instead. If
152 /// @member_name contains a non-boolean, non-`null` scalar value, then
153 /// whatever json_node_get_boolean() would return is returned.
154 /// ## `member_name`
155 /// the name of the @self member
156 /// ## `default_value`
157 /// the value to return if @member_name is not valid
158 ///
159 /// # Returns
160 ///
161 /// the boolean value of the object's member, or the
162 /// given default
163 #[cfg(feature = "v1_6")]
164 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
165 #[doc(alias = "json_object_get_boolean_member_with_default")]
166 #[doc(alias = "get_boolean_member_with_default")]
167 pub fn is_boolean_member_with_default(&self, member_name: &str, default_value: bool) -> bool {
168 unsafe {
169 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()))
170 }
171 }
172
173 /// Convenience function that retrieves the floating point value
174 /// stored in @member_name of @self. It is an error to specify a
175 /// @member_name which does not exist or which holds a non-scalar,
176 /// non-`null` value.
177 ///
178 /// See also: [`double_member_with_default()`][Self::double_member_with_default()],
179 /// [`member()`][Self::member()], [`has_member()`][Self::has_member()]
180 /// ## `member_name`
181 /// the name of the member
182 ///
183 /// # Returns
184 ///
185 /// the floating point value of the object's member
186 #[doc(alias = "json_object_get_double_member")]
187 #[doc(alias = "get_double_member")]
188 pub fn double_member(&self, member_name: &str) -> f64 {
189 unsafe {
190 ffi::json_object_get_double_member(self.to_glib_none().0, member_name.to_glib_none().0)
191 }
192 }
193
194 /// Convenience function that retrieves the floating point value
195 /// stored in @member_name of @self.
196 ///
197 /// If @member_name does not exist, does not contain a scalar value,
198 /// or contains `null`, then @default_value is returned instead. If
199 /// @member_name contains a non-double, non-`null` scalar value, then
200 /// whatever json_node_get_double() would return is returned.
201 /// ## `member_name`
202 /// the name of the @self member
203 /// ## `default_value`
204 /// the value to return if @member_name is not valid
205 ///
206 /// # Returns
207 ///
208 /// the floating point value of the object's member, or the
209 /// given default
210 #[cfg(feature = "v1_6")]
211 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
212 #[doc(alias = "json_object_get_double_member_with_default")]
213 #[doc(alias = "get_double_member_with_default")]
214 pub fn double_member_with_default(&self, member_name: &str, default_value: f64) -> f64 {
215 unsafe {
216 ffi::json_object_get_double_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value)
217 }
218 }
219
220 /// Convenience function that retrieves the integer value
221 /// stored in @member_name of @self. It is an error to specify a
222 /// @member_name which does not exist or which holds a non-scalar,
223 /// non-`null` value.
224 ///
225 /// See also: [`int_member_with_default()`][Self::int_member_with_default()],
226 /// [`member()`][Self::member()], [`has_member()`][Self::has_member()]
227 /// ## `member_name`
228 /// the name of the object member
229 ///
230 /// # Returns
231 ///
232 /// the integer value of the object's member
233 #[doc(alias = "json_object_get_int_member")]
234 #[doc(alias = "get_int_member")]
235 pub fn int_member(&self, member_name: &str) -> i64 {
236 unsafe {
237 ffi::json_object_get_int_member(self.to_glib_none().0, member_name.to_glib_none().0)
238 }
239 }
240
241 /// Convenience function that retrieves the integer value
242 /// stored in @member_name of @self.
243 ///
244 /// If @member_name does not exist, does not contain a scalar value,
245 /// or contains `null`, then @default_value is returned instead. If
246 /// @member_name contains a non-integer, non-`null` scalar value, then whatever
247 /// json_node_get_int() would return is returned.
248 /// ## `member_name`
249 /// the name of the object member
250 /// ## `default_value`
251 /// the value to return if @member_name is not valid
252 ///
253 /// # Returns
254 ///
255 /// the integer value of the object's member, or the
256 /// given default
257 #[cfg(feature = "v1_6")]
258 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
259 #[doc(alias = "json_object_get_int_member_with_default")]
260 #[doc(alias = "get_int_member_with_default")]
261 pub fn int_member_with_default(&self, member_name: &str, default_value: i64) -> i64 {
262 unsafe {
263 ffi::json_object_get_int_member_with_default(self.to_glib_none().0, member_name.to_glib_none().0, default_value)
264 }
265 }
266
267 /// Retrieves the value of the given member inside an object.
268 /// ## `member_name`
269 /// the name of the JSON object member to access
270 ///
271 /// # Returns
272 ///
273 /// the value for the
274 /// requested object member
275 #[doc(alias = "json_object_get_member")]
276 #[doc(alias = "get_member")]
277 pub fn member(&self, member_name: &str) -> Option<Node> {
278 unsafe {
279 from_glib_none(ffi::json_object_get_member(self.to_glib_none().0, member_name.to_glib_none().0))
280 }
281 }
282
283 /// Retrieves all the names of the members of an object.
284 ///
285 /// You can obtain the value for each member by iterating the returned list
286 /// and calling [`member()`][Self::member()].
287 ///
288 /// # Returns
289 ///
290 /// the
291 /// member names of the object
292 #[doc(alias = "json_object_get_members")]
293 #[doc(alias = "get_members")]
294 pub fn members(&self) -> Vec<glib::GString> {
295 unsafe {
296 FromGlibPtrContainer::from_glib_container(ffi::json_object_get_members(self.to_glib_none().0))
297 }
298 }
299
300 /// Convenience function that checks whether the value
301 /// stored in @member_name of @self is null. It is an error to
302 /// specify a @member_name which does not exist.
303 ///
304 /// See also: [`member()`][Self::member()], [`has_member()`][Self::has_member()]
305 /// ## `member_name`
306 /// the name of the member
307 ///
308 /// # Returns
309 ///
310 /// `TRUE` if the value is `null`
311 #[doc(alias = "json_object_get_null_member")]
312 #[doc(alias = "get_null_member")]
313 pub fn is_null_member(&self, member_name: &str) -> bool {
314 unsafe {
315 from_glib(ffi::json_object_get_null_member(self.to_glib_none().0, member_name.to_glib_none().0))
316 }
317 }
318
319 /// Convenience function that retrieves the object
320 /// stored in @member_name of @self. It is an error to specify a @member_name
321 /// which does not exist or which holds a non-`null`, non-object value.
322 ///
323 /// If @member_name contains `null`, then this function will return `NULL`.
324 ///
325 /// See also: [`member()`][Self::member()], [`has_member()`][Self::has_member()]
326 /// ## `member_name`
327 /// the name of the member
328 ///
329 /// # Returns
330 ///
331 /// the object inside the object's member
332 #[doc(alias = "json_object_get_object_member")]
333 #[doc(alias = "get_object_member")]
334#[must_use]
335 pub fn object_member(&self, member_name: &str) -> Option<Object> {
336 unsafe {
337 from_glib_none(ffi::json_object_get_object_member(self.to_glib_none().0, member_name.to_glib_none().0))
338 }
339 }
340
341 /// Retrieves the number of members of a JSON object.
342 ///
343 /// # Returns
344 ///
345 /// the number of members
346 #[doc(alias = "json_object_get_size")]
347 #[doc(alias = "get_size")]
348 pub fn size(&self) -> u32 {
349 unsafe {
350 ffi::json_object_get_size(self.to_glib_none().0)
351 }
352 }
353
354 /// Convenience function that retrieves the string value
355 /// stored in @member_name of @self. It is an error to specify a
356 /// @member_name that does not exist or which holds a non-scalar,
357 /// non-`null` value.
358 ///
359 /// See also: [`string_member_with_default()`][Self::string_member_with_default()],
360 /// [`member()`][Self::member()], [`has_member()`][Self::has_member()]
361 /// ## `member_name`
362 /// the name of the member
363 ///
364 /// # Returns
365 ///
366 /// the string value of the object's member
367 #[doc(alias = "json_object_get_string_member")]
368 #[doc(alias = "get_string_member")]
369 pub fn string_member(&self, member_name: &str) -> glib::GString {
370 unsafe {
371 from_glib_none(ffi::json_object_get_string_member(self.to_glib_none().0, member_name.to_glib_none().0))
372 }
373 }
374
375 /// Convenience function that retrieves the string value
376 /// stored in @member_name of @self.
377 ///
378 /// If @member_name does not exist, does not contain a scalar value,
379 /// or contains `null`, then @default_value is returned instead. If
380 /// @member_name contains a non-string, non-`null` scalar value, then
381 /// [`None`] is returned.
382 /// ## `member_name`
383 /// the name of the @self member
384 /// ## `default_value`
385 /// the value to return if @member_name is not valid
386 ///
387 /// # Returns
388 ///
389 /// the string value of the object's member, or the
390 /// given default
391 #[cfg(feature = "v1_6")]
392 #[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
393 #[doc(alias = "json_object_get_string_member_with_default")]
394 #[doc(alias = "get_string_member_with_default")]
395 pub fn string_member_with_default(&self, member_name: &str, default_value: &str) -> glib::GString {
396 unsafe {
397 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))
398 }
399 }
400
401 /// Retrieves all the values of the members of an object.
402 ///
403 /// # Returns
404 ///
405 /// the
406 /// member values of the object
407 #[doc(alias = "json_object_get_values")]
408 #[doc(alias = "get_values")]
409 pub fn values(&self) -> Vec<Node> {
410 unsafe {
411 FromGlibPtrContainer::from_glib_container(ffi::json_object_get_values(self.to_glib_none().0))
412 }
413 }
414
415 /// Checks whether @self has a member named @member_name.
416 /// ## `member_name`
417 /// the name of a JSON object member
418 ///
419 /// # Returns
420 ///
421 /// `TRUE` if the JSON object has the requested member
422 #[doc(alias = "json_object_has_member")]
423 pub fn has_member(&self, member_name: &str) -> bool {
424 unsafe {
425 from_glib(ffi::json_object_has_member(self.to_glib_none().0, member_name.to_glib_none().0))
426 }
427 }
428
429 #[cfg(feature = "v1_2")]
430 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
431 #[doc(alias = "json_object_hash")]
432 fn hash(&self) -> u32 {
433 unsafe {
434 ffi::json_object_hash(ToGlibPtr::<*mut ffi::JsonObject>::to_glib_none(self).0 as glib::ffi::gconstpointer)
435 }
436 }
437
438 /// Checks whether the given object has been marked as immutable by calling
439 /// [`seal()`][Self::seal()] on it.
440 ///
441 /// # Returns
442 ///
443 /// `TRUE` if the object is immutable
444 #[cfg(feature = "v1_2")]
445 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
446 #[doc(alias = "json_object_is_immutable")]
447 pub fn is_immutable(&self) -> bool {
448 unsafe {
449 from_glib(ffi::json_object_is_immutable(self.to_glib_none().0))
450 }
451 }
452
453 /// Removes @member_name from @self, freeing its allocated resources.
454 /// ## `member_name`
455 /// the name of the member to remove
456 #[doc(alias = "json_object_remove_member")]
457 pub fn remove_member(&self, member_name: &str) {
458 unsafe {
459 ffi::json_object_remove_member(self.to_glib_none().0, member_name.to_glib_none().0);
460 }
461 }
462
463 /// Seals the object, making it immutable to further changes.
464 ///
465 /// This function will recursively seal all members of the object too.
466 ///
467 /// If the object is already immutable, this is a no-op.
468 #[cfg(feature = "v1_2")]
469 #[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
470 #[doc(alias = "json_object_seal")]
471 pub fn seal(&self) {
472 unsafe {
473 ffi::json_object_seal(self.to_glib_none().0);
474 }
475 }
476
477 /// Convenience function for setting an object member with an array value.
478 ///
479 /// See also: [`set_member()`][Self::set_member()], [`Node::take_array()`][crate::Node::take_array()]
480 /// ## `member_name`
481 /// the name of the member
482 /// ## `value`
483 /// the value of the member
484 #[doc(alias = "json_object_set_array_member")]
485 pub fn set_array_member(&self, member_name: &str, value: Array) {
486 unsafe {
487 ffi::json_object_set_array_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib_ptr());
488 }
489 }
490
491 /// Convenience function for setting an object member with a boolean value.
492 ///
493 /// See also: [`set_member()`][Self::set_member()], [`Node::init_boolean()`][crate::Node::init_boolean()]
494 /// ## `member_name`
495 /// the name of the member
496 /// ## `value`
497 /// the value of the member
498 #[doc(alias = "json_object_set_boolean_member")]
499 pub fn set_boolean_member(&self, member_name: &str, value: bool) {
500 unsafe {
501 ffi::json_object_set_boolean_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib());
502 }
503 }
504
505 /// Convenience function for setting an object member with a floating point value.
506 ///
507 /// See also: [`set_member()`][Self::set_member()], [`Node::init_double()`][crate::Node::init_double()]
508 /// ## `member_name`
509 /// the name of the member
510 /// ## `value`
511 /// the value of the member
512 #[doc(alias = "json_object_set_double_member")]
513 pub fn set_double_member(&self, member_name: &str, value: f64) {
514 unsafe {
515 ffi::json_object_set_double_member(self.to_glib_none().0, member_name.to_glib_none().0, value);
516 }
517 }
518
519 /// Convenience function for setting an object member with an integer value.
520 ///
521 /// See also: [`set_member()`][Self::set_member()], [`Node::init_int()`][crate::Node::init_int()]
522 /// ## `member_name`
523 /// the name of the member
524 /// ## `value`
525 /// the value of the member
526 #[doc(alias = "json_object_set_int_member")]
527 pub fn set_int_member(&self, member_name: &str, value: i64) {
528 unsafe {
529 ffi::json_object_set_int_member(self.to_glib_none().0, member_name.to_glib_none().0, value);
530 }
531 }
532
533 /// Sets the value of a member inside an object.
534 ///
535 /// If the object does not have a member with the given name, a new member
536 /// is created.
537 ///
538 /// If the object already has a member with the given name, the current
539 /// value is overwritten with the new.
540 /// ## `member_name`
541 /// the name of the member
542 /// ## `node`
543 /// the value of the member
544 #[doc(alias = "json_object_set_member")]
545 pub fn set_member(&self, member_name: &str, node: Node) {
546 unsafe {
547 ffi::json_object_set_member(self.to_glib_none().0, member_name.to_glib_none().0, node.into_glib_ptr());
548 }
549 }
550
551 /// Convenience function for setting an object member with a `null` value.
552 ///
553 /// See also: [`set_member()`][Self::set_member()], [`Node::init_null()`][crate::Node::init_null()]
554 /// ## `member_name`
555 /// the name of the member
556 #[doc(alias = "json_object_set_null_member")]
557 pub fn set_null_member(&self, member_name: &str) {
558 unsafe {
559 ffi::json_object_set_null_member(self.to_glib_none().0, member_name.to_glib_none().0);
560 }
561 }
562
563 /// Convenience function for setting an object member with an object value.
564 ///
565 /// See also: [`set_member()`][Self::set_member()], [`Node::take_object()`][crate::Node::take_object()]
566 /// ## `member_name`
567 /// the name of the member
568 /// ## `value`
569 /// the value of the member
570 #[doc(alias = "json_object_set_object_member")]
571 pub fn set_object_member(&self, member_name: &str, value: Object) {
572 unsafe {
573 ffi::json_object_set_object_member(self.to_glib_none().0, member_name.to_glib_none().0, value.into_glib_ptr());
574 }
575 }
576
577 /// Convenience function for setting an object member with a string value.
578 ///
579 /// See also: [`set_member()`][Self::set_member()], [`Node::init_string()`][crate::Node::init_string()]
580 /// ## `member_name`
581 /// the name of the member
582 /// ## `value`
583 /// the value of the member
584 #[doc(alias = "json_object_set_string_member")]
585 pub fn set_string_member(&self, member_name: &str, value: &str) {
586 unsafe {
587 ffi::json_object_set_string_member(self.to_glib_none().0, member_name.to_glib_none().0, value.to_glib_none().0);
588 }
589 }
590}
591
592impl Default for Object {
593 fn default() -> Self {
594 Self::new()
595 }
596 }
597
598#[cfg(feature = "v1_2")]
599#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
600impl PartialEq for Object {
601 #[inline]
602 fn eq(&self, other: &Self) -> bool {
603 self.equal(other)
604 }
605}
606#[cfg(feature = "v1_2")]
607#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
608
609impl Eq for Object {}
610
611#[cfg(feature = "v1_2")]
612#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
613impl std::hash::Hash for Object {
614 #[inline]
615 fn hash<H>(&self, state: &mut H) where H: std::hash::Hasher {
616 std::hash::Hash::hash(&self.hash(), state)
617 }
618}