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*/