use crate::interfaces::IUnknown;
use crate::sys::IID;
pub unsafe trait Interface: Sized + 'static {
type VTable;
type Super: Interface;
const IID: IID;
fn is_iid_in_inheritance_chain(riid: &IID) -> bool {
riid == &Self::IID
|| (Self::IID != <IUnknown as Interface>::IID
&& <Self::Super as Interface>::is_iid_in_inheritance_chain(riid))
}
fn as_iunknown(&self) -> &IUnknown {
unsafe { core::mem::transmute(self) }
}
fn as_raw(&self) -> core::ptr::NonNull<core::ptr::NonNull<Self::VTable>> {
unsafe { core::mem::transmute_copy(self) }
}
}