pub unsafe trait ObjectType {
#[allow(clippy::missing_safety_doc)]
unsafe fn from_raw_full(ptr: *const ::ffi::Babl) -> Self;
#[allow(clippy::missing_safety_doc)]
unsafe fn inner(&self) -> *const ::ffi::Babl;
#[doc(alias = "get_name")]
#[doc(alias = "babl_get_name")]
fn name(&self) -> String {
unsafe {
std::ffi::CStr::from_ptr(ffi::babl_get_name(self.inner()))
.to_string_lossy()
.into()
}
}
#[doc(alias = "babl_introspect")]
fn introspect(&self) {
unsafe { ffi::babl_introspect(self.inner()) }
}
}
macro_rules! define_object {
($rust_type:ident) => {
#[derive(Debug)]
pub struct $rust_type(*const ffi::Babl);
unsafe impl crate::ObjectType for $rust_type {
unsafe fn from_raw_full(ptr: *const ffi::Babl) -> Self {
assert!(!ptr.is_null());
Self(ptr)
}
unsafe fn inner(&self) -> *const ffi::Babl {
self.0
}
}
};
}