Skip to main content

tracker/auto/
sparql_cursor.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from
3// from gir-files (https://github.com/gtk-rs/gir-files.git)
4// DO NOT EDIT
5#![allow(deprecated)]
6
7use crate::{ffi, SparqlConnection, SparqlValueType};
8use glib::{
9    prelude::*,
10    signal::{connect_raw, SignalHandlerId},
11    translate::*,
12};
13use std::{boxed::Box as Box_, pin::Pin};
14
15glib::wrapper! {
16    #[doc(alias = "TrackerSparqlCursor")]
17    pub struct SparqlCursor(Object<ffi::TrackerSparqlCursor, ffi::TrackerSparqlCursorClass>);
18
19    match fn {
20        type_ => || ffi::tracker_sparql_cursor_get_type(),
21    }
22}
23
24impl SparqlCursor {
25    #[doc(alias = "tracker_sparql_cursor_close")]
26    pub fn close(&self) {
27        unsafe {
28            ffi::tracker_sparql_cursor_close(self.to_glib_none().0);
29        }
30    }
31
32    #[doc(alias = "tracker_sparql_cursor_get_boolean")]
33    #[doc(alias = "get_boolean")]
34    pub fn is_boolean(&self, column: i32) -> bool {
35        unsafe {
36            from_glib(ffi::tracker_sparql_cursor_get_boolean(
37                self.to_glib_none().0,
38                column,
39            ))
40        }
41    }
42
43    #[doc(alias = "tracker_sparql_cursor_get_connection")]
44    #[doc(alias = "get_connection")]
45    pub fn connection(&self) -> Option<SparqlConnection> {
46        unsafe {
47            from_glib_none(ffi::tracker_sparql_cursor_get_connection(
48                self.to_glib_none().0,
49            ))
50        }
51    }
52
53    #[cfg(feature = "v3_2")]
54    #[cfg_attr(docsrs, doc(cfg(feature = "v3_2")))]
55    #[doc(alias = "tracker_sparql_cursor_get_datetime")]
56    #[doc(alias = "get_datetime")]
57    pub fn datetime(&self, column: i32) -> Option<glib::DateTime> {
58        unsafe {
59            from_glib_full(ffi::tracker_sparql_cursor_get_datetime(
60                self.to_glib_none().0,
61                column,
62            ))
63        }
64    }
65
66    #[doc(alias = "tracker_sparql_cursor_get_double")]
67    #[doc(alias = "get_double")]
68    pub fn double(&self, column: i32) -> f64 {
69        unsafe { ffi::tracker_sparql_cursor_get_double(self.to_glib_none().0, column) }
70    }
71
72    #[doc(alias = "tracker_sparql_cursor_get_integer")]
73    #[doc(alias = "get_integer")]
74    pub fn integer(&self, column: i32) -> i64 {
75        unsafe { ffi::tracker_sparql_cursor_get_integer(self.to_glib_none().0, column) }
76    }
77
78    #[doc(alias = "tracker_sparql_cursor_get_n_columns")]
79    #[doc(alias = "get_n_columns")]
80    #[doc(alias = "n-columns")]
81    pub fn n_columns(&self) -> i32 {
82        unsafe { ffi::tracker_sparql_cursor_get_n_columns(self.to_glib_none().0) }
83    }
84
85    #[doc(alias = "tracker_sparql_cursor_get_value_type")]
86    #[doc(alias = "get_value_type")]
87    pub fn value_type(&self, column: i32) -> SparqlValueType {
88        unsafe {
89            from_glib(ffi::tracker_sparql_cursor_get_value_type(
90                self.to_glib_none().0,
91                column,
92            ))
93        }
94    }
95
96    #[doc(alias = "tracker_sparql_cursor_get_variable_name")]
97    #[doc(alias = "get_variable_name")]
98    pub fn variable_name(&self, column: i32) -> Option<glib::GString> {
99        unsafe {
100            from_glib_none(ffi::tracker_sparql_cursor_get_variable_name(
101                self.to_glib_none().0,
102                column,
103            ))
104        }
105    }
106
107    #[doc(alias = "tracker_sparql_cursor_is_bound")]
108    pub fn is_bound(&self, column: i32) -> bool {
109        unsafe {
110            from_glib(ffi::tracker_sparql_cursor_is_bound(
111                self.to_glib_none().0,
112                column,
113            ))
114        }
115    }
116
117    #[doc(alias = "tracker_sparql_cursor_next")]
118    pub fn next(
119        &self,
120        cancellable: Option<&impl IsA<gio::Cancellable>>,
121    ) -> Result<bool, glib::Error> {
122        unsafe {
123            let mut error = std::ptr::null_mut();
124            let ret = ffi::tracker_sparql_cursor_next(
125                self.to_glib_none().0,
126                cancellable.map(|p| p.as_ref()).to_glib_none().0,
127                &mut error,
128            );
129            if error.is_null() {
130                Ok(from_glib(ret))
131            } else {
132                Err(from_glib_full(error))
133            }
134        }
135    }
136
137    #[doc(alias = "tracker_sparql_cursor_next_async")]
138    pub fn next_async<P: FnOnce(Result<bool, glib::Error>) + 'static>(
139        &self,
140        cancellable: Option<&impl IsA<gio::Cancellable>>,
141        callback: P,
142    ) {
143        let main_context = glib::MainContext::ref_thread_default();
144        let is_main_context_owner = main_context.is_owner();
145        let has_acquired_main_context = (!is_main_context_owner)
146            .then(|| main_context.acquire().ok())
147            .flatten();
148        assert!(
149            is_main_context_owner || has_acquired_main_context.is_some(),
150            "Async operations only allowed if the thread is owning the MainContext"
151        );
152
153        let user_data: Box_<glib::thread_guard::ThreadGuard<P>> =
154            Box_::new(glib::thread_guard::ThreadGuard::new(callback));
155        unsafe extern "C" fn next_async_trampoline<
156            P: FnOnce(Result<bool, glib::Error>) + 'static,
157        >(
158            _source_object: *mut glib::gobject_ffi::GObject,
159            res: *mut gio::ffi::GAsyncResult,
160            user_data: glib::ffi::gpointer,
161        ) {
162            unsafe {
163                let mut error = std::ptr::null_mut();
164                let ret = ffi::tracker_sparql_cursor_next_finish(
165                    _source_object as *mut _,
166                    res,
167                    &mut error,
168                );
169                let result = if error.is_null() {
170                    Ok(from_glib(ret))
171                } else {
172                    Err(from_glib_full(error))
173                };
174                let callback: Box_<glib::thread_guard::ThreadGuard<P>> =
175                    Box_::from_raw(user_data as *mut _);
176                let callback: P = callback.into_inner();
177                callback(result);
178            }
179        }
180        let callback = next_async_trampoline::<P>;
181        unsafe {
182            ffi::tracker_sparql_cursor_next_async(
183                self.to_glib_none().0,
184                cancellable.map(|p| p.as_ref()).to_glib_none().0,
185                Some(callback),
186                Box_::into_raw(user_data) as *mut _,
187            );
188        }
189    }
190
191    pub fn next_future(
192        &self,
193    ) -> Pin<Box_<dyn std::future::Future<Output = Result<bool, glib::Error>> + 'static>> {
194        Box_::pin(gio::GioFuture::new(self, move |obj, cancellable, send| {
195            obj.next_async(Some(cancellable), move |res| {
196                send.resolve(res);
197            });
198        }))
199    }
200
201    #[cfg_attr(feature = "v3_5", deprecated = "Since 3.5")]
202    #[allow(deprecated)]
203    #[doc(alias = "tracker_sparql_cursor_rewind")]
204    pub fn rewind(&self) {
205        unsafe {
206            ffi::tracker_sparql_cursor_rewind(self.to_glib_none().0);
207        }
208    }
209
210    #[doc(alias = "n-columns")]
211    pub fn connect_n_columns_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
212        unsafe extern "C" fn notify_n_columns_trampoline<F: Fn(&SparqlCursor) + 'static>(
213            this: *mut ffi::TrackerSparqlCursor,
214            _param_spec: glib::ffi::gpointer,
215            f: glib::ffi::gpointer,
216        ) {
217            unsafe {
218                let f: &F = &*(f as *const F);
219                f(&from_glib_borrow(this))
220            }
221        }
222        unsafe {
223            let f: Box_<F> = Box_::new(f);
224            connect_raw(
225                self.as_ptr() as *mut _,
226                c"notify::n-columns".as_ptr(),
227                Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
228                    notify_n_columns_trampoline::<F> as *const (),
229                )),
230                Box_::into_raw(f),
231            )
232        }
233    }
234}