blob: ff870db553c8c082bd41bf6d7c48cc4e24353470 [file] [log] [blame]
// Take a look at the license at the top of the repository in the LICENSE file.
use std::num::NonZeroU32;
type IoObject = NonZeroU32;
pub(crate) struct IOReleaser(IoObject);
impl IOReleaser {
pub(crate) fn new(obj: u32) -> Option<Self> {
IoObject::new(obj).map(Self)
}
pub(crate) unsafe fn new_unchecked(obj: u32) -> Self {
// Chance at catching in-development mistakes
debug_assert_ne!(obj, 0);
Self(IoObject::new_unchecked(obj))
}
#[inline]
pub(crate) fn inner(&self) -> u32 {
self.0.get()
}
}
impl Drop for IOReleaser {
fn drop(&mut self) {
unsafe { super::ffi::IOObjectRelease(self.0.get() as _) };
}
}