Skip to main content

tracker/
sparql_connection.rs

1use crate::SparqlConnection;
2use glib::object::IsA;
3use glib::translate::*;
4use std::ptr;
5
6pub trait SparqlConnectionExtManual {
7    #[doc(alias = "tracker_sparql_connection_update")]
8    fn update(
9        &self,
10        sparql: &str,
11        cancellable: Option<&impl IsA<gio::Cancellable>>,
12    ) -> Result<(), glib::Error>;
13}
14
15impl SparqlConnectionExtManual for SparqlConnection {
16    fn update(
17        &self,
18        sparql: &str,
19        cancellable: Option<&impl IsA<gio::Cancellable>>,
20    ) -> Result<(), glib::Error> {
21        unsafe {
22            let mut error = ptr::null_mut();
23            // We need to implement this manually since _update() returns void, but
24            // gir expects functions which take GError to return a bool
25            let _ = ffi::tracker_sparql_connection_update(
26                self.to_glib_none().0,
27                sparql.to_glib_none().0,
28                cancellable.map(|p| p.as_ref()).to_glib_none().0,
29                &mut error,
30            );
31            if error.is_null() {
32                Ok(())
33            } else {
34                Err(from_glib_full(error))
35            }
36        }
37    }
38}
39
40unsafe impl Send for SparqlConnection {}
41unsafe impl Sync for SparqlConnection {}
42
43/* The following function is not implemented in crate::auto because of the error message below.
44
45pub trait SparqlConnectionExtManual: 'static {
46    update_array_async<P: IsA<gio::Cancellable>, Q: FnOnce(Result<(), glib::Error>) + Send + 'static>(&self, sparql: &str, cancellable: Option<&P>, callback: Q);
47}
48
49impl<O: IsA<SparqlConnection>> SparqlConnectionExtManual for O {
50        #[doc(alias = "tracker_sparql_connection_update_array_async")]
51    pub fn update_array_async<P: IsA<gio::Cancellable>, Q: FnOnce(Result<(), glib::Error>) + Send + 'static>(&self, sparql: &str, cancellable: Option<&P>, callback: Q) {
52        let sparql_length = sparql.len() as i32;
53        let user_data: Box_<Q> = Box_::new(callback);
54        unsafe extern "C" fn update_array_async_trampoline<Q: FnOnce(Result<(), glib::Error>) + Send + 'static>(_source_object: *mut glib::gobject_ffi::GObject, res: *mut gio::ffi::GAsyncResult, user_data: glib::ffi::gpointer) {
55            let mut error = ptr::null_mut();
56            let _ = ffi::tracker_sparql_connection_update_array_finish(_source_object as *mut _, res, &mut error);
57            let result = if error.is_null() { Ok(()) } else { Err(from_glib_full(error)) };
58            let callback: Box_<Q> = Box_::from_raw(user_data as *mut _);
59            callback(result);
60        }
61        let callback = update_array_async_trampoline::<Q>;
62        unsafe {
63            ffi::tracker_sparql_connection_update_array_async(self.to_glib_none().0, sparql.to_glib_none().0, sparql_length, cancellable.map(|p| p.as_ref()).to_glib_none().0, Some(callback), Box_::into_raw(user_data) as *mut _);
64        }
65    }
66
67
68error[E0277]: the trait bound `str: glib::translate::ToGlibPtr<'_, *mut *mut i8>` is not satisfied
69   --> src/auto/sparql_connection.rs:182:93
70    |
71182 | ..._none().0, sparql.to_glib_none().0, sparql_length, cancellable.map(|p| p.as_ref()).to_glib_none().0, Some(callback), Box_::into_raw(us...
72    |                      ^^^^^^^^^^^^ the trait `glib::translate::ToGlibPtr<'_, *mut *mut i8>` is not implemented for `str`
73    |
74    = help: the following implementations were found:
75              <str as glib::translate::ToGlibPtr<'a, *const i8>>
76              <str as glib::translate::ToGlibPtr<'a, *mut i8>>
77
78*/