diff --git a/rust-bindings/rust/conf/ostree.toml b/rust-bindings/rust/conf/ostree.toml index c7ac44b7..8289bf53 100644 --- a/rust-bindings/rust/conf/ostree.toml +++ b/rust-bindings/rust/conf/ostree.toml @@ -36,7 +36,6 @@ generate = [ "OSTree.RepoCommitState", "OSTree.RepoDevInoCache", "OSTree.RepoFile", - "OSTree.RepoFinder", "OSTree.RepoFinderAvahi", "OSTree.RepoFinderConfig", "OSTree.RepoFinderMount", @@ -140,7 +139,7 @@ status = "generate" ignore = true [[object.function]] - # these fail because of issues with zero-terminated arrays + # these fail because of issues with arrays of dubious lifetimes pattern = "find_remotes_async|pull_from_remotes_async" ignore = true @@ -150,7 +149,6 @@ status = "generate" ignore = true [[object.function]] - # TODO: see which of these annotations I can upstream name = "checkout_at" [[object.function.parameter]] name = "options" @@ -159,6 +157,14 @@ status = "generate" name = "destination_path" string_type = "filename" +[[object]] +name = "OSTree.RepoFinder" +status = "generate" + [[object.function]] + # these fail because of issues with arrays of dubious lifetimes + pattern = "resolve_async|resolve_all_async" + ignore = true + [[object]] name = "OSTree.RepoFinderResult" status = "generate" diff --git a/rust-bindings/rust/src/auto/repo_finder.rs b/rust-bindings/rust/src/auto/repo_finder.rs index 821d5417..b2e4ea3d 100644 --- a/rust-bindings/rust/src/auto/repo_finder.rs +++ b/rust-bindings/rust/src/auto/repo_finder.rs @@ -5,28 +5,14 @@ #[cfg(any(feature = "v2018_6", feature = "dox"))] use gio; #[cfg(any(feature = "v2018_6", feature = "dox"))] -use gio_sys; -#[cfg(any(feature = "v2018_6", feature = "dox"))] use glib; use glib::object::IsA; use glib::translate::*; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -use glib_sys; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -use gobject_sys; use ostree_sys; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -use std::boxed::Box as Box_; use std::fmt; #[cfg(any(feature = "v2018_6", feature = "dox"))] -use std::pin::Pin; -#[cfg(any(feature = "v2018_6", feature = "dox"))] use std::ptr; #[cfg(any(feature = "v2018_6", feature = "dox"))] -use CollectionRef; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -use Repo; -#[cfg(any(feature = "v2018_6", feature = "dox"))] use RepoFinderResult; glib_wrapper! { @@ -37,96 +23,13 @@ glib_wrapper! { } } -impl RepoFinder { - #[cfg(any(feature = "v2018_6", feature = "dox"))] - pub fn resolve_all_async, Q: FnOnce(Result, glib::Error>) + Send + 'static>(finders: &[RepoFinder], refs: &[&CollectionRef], parent_repo: &Repo, cancellable: Option<&P>, callback: Q) { - let user_data: Box_ = Box_::new(callback); - unsafe extern "C" fn resolve_all_async_trampoline, glib::Error>) + Send + 'static>(_source_object: *mut gobject_sys::GObject, res: *mut gio_sys::GAsyncResult, user_data: glib_sys::gpointer) { - let mut error = ptr::null_mut(); - let ret = ostree_sys::ostree_repo_finder_resolve_all_finish(res, &mut error); - let result = if error.is_null() { Ok(FromGlibPtrContainer::from_glib_full(ret)) } else { Err(from_glib_full(error)) }; - let callback: Box_ = Box_::from_raw(user_data as *mut _); - callback(result); - } - let callback = resolve_all_async_trampoline::; - unsafe { - ostree_sys::ostree_repo_finder_resolve_all_async(finders.to_glib_none().0, refs.to_glib_none().0, parent_repo.to_glib_none().0, cancellable.map(|p| p.as_ref()).to_glib_none().0, Some(callback), Box_::into_raw(user_data) as *mut _); - } - } - - - #[cfg(any(feature = "v2018_6", feature = "dox"))] - pub fn resolve_all_async_future(finders: &[RepoFinder], refs: &[&CollectionRef], parent_repo: &Repo) -> Pin, glib::Error>> + 'static>> { - - let finders = finders.clone(); - let refs = refs.clone(); - let parent_repo = parent_repo.clone(); - Box_::pin(gio::GioFuture::new(&(), move |_obj, send| { - let cancellable = gio::Cancellable::new(); - Self::resolve_all_async( - &finders, - &refs, - &parent_repo, - Some(&cancellable), - move |res| { - send.resolve(res); - }, - ); - - cancellable - })) - } -} +impl RepoFinder {} pub const NONE_REPO_FINDER: Option<&RepoFinder> = None; -pub trait RepoFinderExt: 'static { - #[cfg(any(feature = "v2018_6", feature = "dox"))] - fn resolve_async, Q: FnOnce(Result, glib::Error>) + Send + 'static>(&self, refs: &[&CollectionRef], parent_repo: &Repo, cancellable: Option<&P>, callback: Q); +pub trait RepoFinderExt: 'static {} - - #[cfg(any(feature = "v2018_6", feature = "dox"))] - fn resolve_async_future(&self, refs: &[&CollectionRef], parent_repo: &Repo) -> Pin, glib::Error>> + 'static>>; -} - -impl> RepoFinderExt for O { - #[cfg(any(feature = "v2018_6", feature = "dox"))] - fn resolve_async, Q: FnOnce(Result, glib::Error>) + Send + 'static>(&self, refs: &[&CollectionRef], parent_repo: &Repo, cancellable: Option<&P>, callback: Q) { - let user_data: Box_ = Box_::new(callback); - unsafe extern "C" fn resolve_async_trampoline, glib::Error>) + Send + 'static>(_source_object: *mut gobject_sys::GObject, res: *mut gio_sys::GAsyncResult, user_data: glib_sys::gpointer) { - let mut error = ptr::null_mut(); - let ret = ostree_sys::ostree_repo_finder_resolve_finish(_source_object as *mut _, res, &mut error); - let result = if error.is_null() { Ok(FromGlibPtrContainer::from_glib_full(ret)) } else { Err(from_glib_full(error)) }; - let callback: Box_ = Box_::from_raw(user_data as *mut _); - callback(result); - } - let callback = resolve_async_trampoline::; - unsafe { - ostree_sys::ostree_repo_finder_resolve_async(self.as_ref().to_glib_none().0, refs.to_glib_none().0, parent_repo.to_glib_none().0, cancellable.map(|p| p.as_ref()).to_glib_none().0, Some(callback), Box_::into_raw(user_data) as *mut _); - } - } - - - #[cfg(any(feature = "v2018_6", feature = "dox"))] - fn resolve_async_future(&self, refs: &[&CollectionRef], parent_repo: &Repo) -> Pin, glib::Error>> + 'static>> { - - let refs = refs.clone(); - let parent_repo = parent_repo.clone(); - Box_::pin(gio::GioFuture::new(self, move |obj, send| { - let cancellable = gio::Cancellable::new(); - obj.resolve_async( - &refs, - &parent_repo, - Some(&cancellable), - move |res| { - send.resolve(res); - }, - ); - - cancellable - })) - } -} +impl> RepoFinderExt for O {} impl fmt::Display for RepoFinder { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { diff --git a/rust-bindings/rust/src/auto/versions.txt b/rust-bindings/rust/src/auto/versions.txt index 34a0b4e5..7b588290 100644 --- a/rust-bindings/rust/src/auto/versions.txt +++ b/rust-bindings/rust/src/auto/versions.txt @@ -1,2 +1,2 @@ Generated by gir (https://github.com/gtk-rs/gir @ 60cbef05) -from gir-files (https://github.com/gtk-rs/gir-files @ 2495460+) +from gir-files (https://github.com/gtk-rs/gir-files @ e8bc04f) diff --git a/rust-bindings/rust/sys/src/auto/versions.txt b/rust-bindings/rust/sys/src/auto/versions.txt index 34a0b4e5..7b588290 100644 --- a/rust-bindings/rust/sys/src/auto/versions.txt +++ b/rust-bindings/rust/sys/src/auto/versions.txt @@ -1,2 +1,2 @@ Generated by gir (https://github.com/gtk-rs/gir @ 60cbef05) -from gir-files (https://github.com/gtk-rs/gir-files @ 2495460+) +from gir-files (https://github.com/gtk-rs/gir-files @ e8bc04f)