Skip to main content

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}