Implement Checksum type for binary checksums

This commit is contained in:
Felix Krull 2019-08-31 22:40:05 +02:00 committed by Colin Walters
parent 6ef9ab2558
commit 17a9d7c855
2 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,39 @@
use glib::translate::{from_glib_full, FromGlibPtrFull};
use glib::GString;
use glib_sys::{g_free, gpointer};
use std::fmt;
pub struct Checksum {
bytes: *mut [u8; 32],
}
impl Checksum {
pub(crate) unsafe fn new(bytes: *mut [u8; 32]) -> Checksum {
assert!(!bytes.is_null());
Checksum { bytes }
}
fn to_gstring(&self) -> GString {
unsafe { from_glib_full(ostree_sys::ostree_checksum_from_bytes(self.bytes)) }
}
}
impl Drop for Checksum {
fn drop(&mut self) {
unsafe {
g_free(self.bytes as gpointer);
}
}
}
impl FromGlibPtrFull<*mut [u8; 32]> for Checksum {
unsafe fn from_glib_full(ptr: *mut [u8; 32]) -> Self {
Checksum::new(ptr)
}
}
impl fmt::Display for Checksum {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.to_gstring())
}
}

View File

@ -34,6 +34,7 @@ pub use crate::auto::functions::*;
pub use crate::auto::*; pub use crate::auto::*;
// handwritten code // handwritten code
mod checksum;
#[cfg(any(feature = "v2018_6", feature = "dox"))] #[cfg(any(feature = "v2018_6", feature = "dox"))]
mod collection_ref; mod collection_ref;
#[cfg(any(feature = "v2019_3", feature = "dox"))] #[cfg(any(feature = "v2019_3", feature = "dox"))]
@ -42,6 +43,7 @@ mod object_name;
mod repo; mod repo;
#[cfg(any(feature = "v2018_2", feature = "dox"))] #[cfg(any(feature = "v2018_2", feature = "dox"))]
mod repo_checkout_at_options; mod repo_checkout_at_options;
pub use crate::checksum::*;
#[cfg(any(feature = "v2018_6", feature = "dox"))] #[cfg(any(feature = "v2018_6", feature = "dox"))]
pub use crate::collection_ref::*; pub use crate::collection_ref::*;
#[cfg(any(feature = "v2019_3", feature = "dox"))] #[cfg(any(feature = "v2019_3", feature = "dox"))]