From 8bfefa2b146eb2945263f414bc9c76e18a184eb8 Mon Sep 17 00:00:00 2001 From: Felix Krull Date: Sat, 18 May 2019 13:57:50 +0200 Subject: [PATCH] Build CollectionRef manually That way we can get Eq and Hash. --- rust-bindings/rust/conf/ostree.toml | 10 ++- rust-bindings/rust/gir-files/OSTree-1.0.gir | 30 ++------- rust-bindings/rust/src/auto/collection_ref.rs | 39 ------------ rust-bindings/rust/src/auto/mod.rs | 5 -- rust-bindings/rust/src/collection_ref.rs | 62 +++++++++++++++++++ rust-bindings/rust/src/lib.rs | 16 +++-- 6 files changed, 86 insertions(+), 76 deletions(-) delete mode 100644 rust-bindings/rust/src/auto/collection_ref.rs create mode 100644 rust-bindings/rust/src/collection_ref.rs diff --git a/rust-bindings/rust/conf/ostree.toml b/rust-bindings/rust/conf/ostree.toml index 75b89e1b..d2c01499 100644 --- a/rust-bindings/rust/conf/ostree.toml +++ b/rust-bindings/rust/conf/ostree.toml @@ -53,9 +53,15 @@ manual = [ [[object]] name = "OSTree.CollectionRef" -status = "generate" +status = "manual" [[object.function]] - pattern = "dupv|equal|freev|hash" + # helper functions for NULL-terminated arrays + pattern = "dupv|freev" + ignore = true + + [[object.function]] + # we get this for free? + name = "dup" ignore = true [[object]] diff --git a/rust-bindings/rust/gir-files/OSTree-1.0.gir b/rust-bindings/rust/gir-files/OSTree-1.0.gir index 6257837a..33df3aa3 100644 --- a/rust-bindings/rust/gir-files/OSTree-1.0.gir +++ b/rust-bindings/rust/gir-files/OSTree-1.0.gir @@ -995,17 +995,11 @@ ref name, and %FALSE otherwise. Both @ref1 and @ref2 must be non-%NULL. - + an #OstreeCollectionRef - + another #OstreeCollectionRef @@ -1038,10 +1032,7 @@ must be %NULL-terminated; it may be empty, but must not be %NULL. - + an #OstreeCollectionRef @@ -11550,17 +11541,11 @@ ref name, and %FALSE otherwise. Both @ref1 and @ref2 must be non-%NULL. - + an #OstreeCollectionRef - + another #OstreeCollectionRef @@ -11595,10 +11580,7 @@ must be %NULL-terminated; it may be empty, but must not be %NULL. - + an #OstreeCollectionRef diff --git a/rust-bindings/rust/src/auto/collection_ref.rs b/rust-bindings/rust/src/auto/collection_ref.rs deleted file mode 100644 index 892d1418..00000000 --- a/rust-bindings/rust/src/auto/collection_ref.rs +++ /dev/null @@ -1,39 +0,0 @@ -// This file was generated by gir (https://github.com/gtk-rs/gir) -// from gir-files (https://github.com/gtk-rs/gir-files) -// DO NOT EDIT - -use ffi; -use glib::translate::*; -use glib_ffi; -use gobject_ffi; -use std::mem; -use std::ptr; - -glib_wrapper! { - #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] - pub struct CollectionRef(Boxed); - - match fn { - copy => |ptr| gobject_ffi::g_boxed_copy(ffi::ostree_collection_ref_get_type(), ptr as *mut _) as *mut ffi::OstreeCollectionRef, - free => |ptr| gobject_ffi::g_boxed_free(ffi::ostree_collection_ref_get_type(), ptr as *mut _), - get_type => || ffi::ostree_collection_ref_get_type(), - } -} - -impl CollectionRef { - #[cfg(any(feature = "v2018_6", feature = "dox"))] - pub fn new<'a, P: Into>>(collection_id: P, ref_name: &str) -> CollectionRef { - let collection_id = collection_id.into(); - let collection_id = collection_id.to_glib_none(); - unsafe { - from_glib_full(ffi::ostree_collection_ref_new(collection_id.0, ref_name.to_glib_none().0)) - } - } - - #[cfg(any(feature = "v2018_6", feature = "dox"))] - pub fn dup(&self) -> Option { - unsafe { - from_glib_full(ffi::ostree_collection_ref_dup(self.to_glib_none().0)) - } - } -} diff --git a/rust-bindings/rust/src/auto/mod.rs b/rust-bindings/rust/src/auto/mod.rs index 400198f2..9673664b 100644 --- a/rust-bindings/rust/src/auto/mod.rs +++ b/rust-bindings/rust/src/auto/mod.rs @@ -26,11 +26,6 @@ mod se_policy; pub use self::se_policy::SePolicy; pub use self::se_policy::SePolicyExt; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -mod collection_ref; -#[cfg(any(feature = "v2018_6", feature = "dox"))] -pub use self::collection_ref::CollectionRef; - #[cfg(any(feature = "v2018_6", feature = "dox"))] mod remote; #[cfg(any(feature = "v2018_6", feature = "dox"))] diff --git a/rust-bindings/rust/src/collection_ref.rs b/rust-bindings/rust/src/collection_ref.rs new file mode 100644 index 00000000..27374e37 --- /dev/null +++ b/rust-bindings/rust/src/collection_ref.rs @@ -0,0 +1,62 @@ +// Based on a file generated by gir. Changes are marked below. +use ffi; +use glib::translate::*; +use glib_ffi; +use gobject_ffi; +use std::hash; +use std::mem; +use std::ptr; + +glib_wrapper! { + #[derive(Debug, PartialOrd, Ord)] + pub struct CollectionRef(Boxed); + + match fn { + copy => |ptr| gobject_ffi::g_boxed_copy(ffi::ostree_collection_ref_get_type(), ptr as *mut _) as *mut ffi::OstreeCollectionRef, + free => |ptr| gobject_ffi::g_boxed_free(ffi::ostree_collection_ref_get_type(), ptr as *mut _), + get_type => || ffi::ostree_collection_ref_get_type(), + } +} + +impl CollectionRef { + #[cfg(any(feature = "v2018_6", feature = "dox"))] + pub fn new<'a, P: Into>>(collection_id: P, ref_name: &str) -> CollectionRef { + let collection_id = collection_id.into(); + let collection_id = collection_id.to_glib_none(); + unsafe { + from_glib_full(ffi::ostree_collection_ref_new(collection_id.0, ref_name.to_glib_none().0)) + } + } + + #[cfg(any(feature = "v2018_6", feature = "dox"))] + fn equal(&self, ref2: &CollectionRef) -> bool { + unsafe { + // CHANGE: both instances of *mut to *const + from_glib(ffi::ostree_collection_ref_equal(ToGlibPtr::<*const ffi::OstreeCollectionRef>::to_glib_none(self).0 as glib_ffi::gconstpointer, ToGlibPtr::<*const ffi::OstreeCollectionRef>::to_glib_none(ref2).0 as glib_ffi::gconstpointer)) + } + } + + #[cfg(any(feature = "v2018_6", feature = "dox"))] + fn hash(&self) -> u32 { + unsafe { + // CHANGE: *mut to *const + ffi::ostree_collection_ref_hash(ToGlibPtr::<*const ffi::OstreeCollectionRef>::to_glib_none(self).0 as glib_ffi::gconstpointer) + } + } +} + +impl PartialEq for CollectionRef { + #[inline] + fn eq(&self, other: &Self) -> bool { + self.equal(other) + } +} + +impl Eq for CollectionRef {} + +impl hash::Hash for CollectionRef { + #[inline] + fn hash(&self, state: &mut H) where H: hash::Hasher { + hash::Hash::hash(&self.hash(), state) + } +} diff --git a/rust-bindings/rust/src/lib.rs b/rust-bindings/rust/src/lib.rs index 12b99db1..2e6e77bb 100644 --- a/rust-bindings/rust/src/lib.rs +++ b/rust-bindings/rust/src/lib.rs @@ -14,18 +14,22 @@ extern crate lazy_static; use glib::Error; // re-exports -#[cfg_attr(feature = "cargo-clippy", allow(clippy))] mod auto; -pub use auto::functions::*; -pub use auto::*; +pub use crate::auto::functions::*; +pub use crate::auto::*; mod repo; +#[cfg(any(feature = "v2018_6", feature = "dox"))] +mod collection_ref; +#[cfg(any(feature = "v2018_6", feature = "dox"))] +pub use crate::collection_ref::CollectionRef; + mod object_name; -pub use object_name::ObjectName; +pub use crate::object_name::ObjectName; // public modules pub mod prelude { - pub use auto::traits::*; - pub use repo::RepoExtManual; + pub use crate::auto::traits::*; + pub use crate::repo::RepoExtManual; }