ostree/rust-bindings/rust/src/sysroot_write_deployments_o...

56 lines
1.6 KiB
Rust

use ffi::OstreeSysrootWriteDeploymentsOpts;
use glib::translate::*;
pub struct SysrootWriteDeploymentsOpts {
pub do_postclean: bool,
}
impl Default for SysrootWriteDeploymentsOpts {
fn default() -> Self {
SysrootWriteDeploymentsOpts {
do_postclean: false,
}
}
}
impl<'a> ToGlibPtr<'a, *const OstreeSysrootWriteDeploymentsOpts> for SysrootWriteDeploymentsOpts {
type Storage = Box<OstreeSysrootWriteDeploymentsOpts>;
fn to_glib_none(&'a self) -> Stash<*const OstreeSysrootWriteDeploymentsOpts, Self> {
// Creating this struct from zeroed memory is fine since it's `repr(C)` and only contains
// primitive types.
// The struct needs to be boxed so the pointer we return remains valid even as the Stash is
// moved around.
let mut options =
Box::new(unsafe { std::mem::zeroed::<OstreeSysrootWriteDeploymentsOpts>() });
options.do_postclean = self.do_postclean.into_glib();
Stash(options.as_ref(), options)
}
}
#[cfg(test)]
mod tests {
use super::*;
use glib_sys::{GFALSE, GTRUE};
#[test]
fn should_convert_default_options() {
let options = SysrootWriteDeploymentsOpts::default();
let stash = options.to_glib_none();
let ptr = stash.0;
unsafe {
assert_eq!((*ptr).do_postclean, GFALSE);
}
}
#[test]
fn should_convert_non_default_options() {
let options = SysrootWriteDeploymentsOpts { do_postclean: true };
let stash = options.to_glib_none();
let ptr = stash.0;
unsafe {
assert_eq!((*ptr).do_postclean, GTRUE);
}
}
}