1use crate::{ffi};
7#[cfg(feature = "v1_42")]
8#[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
9use glib::{translate::*};
10
11glib::wrapper! {
12 #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
13 pub struct Range(Shared<ffi::NMRange>);
14
15 match fn {
16 ref => |ptr| ffi::nm_range_ref(ptr),
17 unref => |ptr| ffi::nm_range_unref(ptr),
18 type_ => || ffi::nm_range_get_type(),
19 }
20}
21
22impl Range {
23 #[cfg(feature = "v1_42")]
35 #[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
36 #[doc(alias = "nm_range_new")]
37 pub fn new(start: u64, end: u64) -> Range {
38 assert_initialized_main_thread!();
39 unsafe {
40 from_glib_full(ffi::nm_range_new(start, end))
41 }
42 }
43
44 #[cfg(feature = "v1_42")]
54 #[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
55 #[doc(alias = "nm_range_cmp")]
56 pub fn cmp(&self, b: &Range) -> i32 {
57 unsafe {
58 ffi::nm_range_cmp(self.to_glib_none().0, b.to_glib_none().0)
59 }
60 }
61
62 #[cfg(feature = "v1_42")]
75 #[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
76 #[doc(alias = "nm_range_get_range")]
77 #[doc(alias = "get_range")]
78 pub fn range(&self) -> Option<(u64, u64)> {
79 unsafe {
80 let mut start = std::mem::MaybeUninit::uninit();
81 let mut end = std::mem::MaybeUninit::uninit();
82 let ret = from_glib(ffi::nm_range_get_range(self.to_glib_none().0, start.as_mut_ptr(), end.as_mut_ptr()));
83 if ret { Some((start.assume_init(), end.assume_init())) } else { None }
84 }
85 }
86
87 #[cfg(feature = "v1_42")]
93 #[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
94 #[doc(alias = "nm_range_to_str")]
95 pub fn to_str(&self) -> glib::GString {
96 unsafe {
97 from_glib_full(ffi::nm_range_to_str(self.to_glib_none().0))
98 }
99 }
100
101 #[cfg(feature = "v1_42")]
110 #[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
111 #[doc(alias = "nm_range_from_str")]
112 pub fn from_str(str: &str) -> Result<Range, glib::Error> {
113 assert_initialized_main_thread!();
114 unsafe {
115 let mut error = std::ptr::null_mut();
116 let ret = ffi::nm_range_from_str(str.to_glib_none().0, &mut error);
117 if error.is_null() { Ok(from_glib_full(ret)) } else { Err(from_glib_full(error)) }
118 }
119 }
120}
121
122#[cfg(feature = "v1_42")]
123#[cfg_attr(docsrs, doc(cfg(feature = "v1_42")))]
124impl std::fmt::Display for Range {
125 #[inline]
126 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
127 f.write_str(&self.to_str())
128 }
129}