use super::*;
pub trait OwnedMessageInterop: SealedInternal {}
impl<T: Message> OwnedMessageInterop for T {}
pub trait MessageViewInterop<'msg>: SealedInternal {
fn __unstable_as_raw_message(&self) -> *const std::ffi::c_void;
unsafe fn __unstable_wrap_raw_message(raw: &'msg *const std::ffi::c_void) -> Self;
unsafe fn __unstable_wrap_raw_message_unchecked_lifetime(raw: *const std::ffi::c_void) -> Self;
}
pub trait MessageMutInterop<'msg>: SealedInternal {}
impl<'a, T: MessageMut<'a>> MessageMutInterop<'a> for T {}
impl<'a, T> MessageViewInterop<'a> for T
where
Self: MessageView<'a> + From<MessageViewInner<'a, <Self as MessageView<'a>>::Message>>,
{
unsafe fn __unstable_wrap_raw_message(msg: &'a *const std::ffi::c_void) -> Self {
let raw = RawMessage::new(*msg as *mut _).unwrap();
let inner = unsafe { MessageViewInner::wrap_raw(raw) };
inner.into()
}
unsafe fn __unstable_wrap_raw_message_unchecked_lifetime(msg: *const std::ffi::c_void) -> Self {
let raw = RawMessage::new(msg as *mut _).unwrap();
let inner = unsafe { MessageViewInner::wrap_raw(raw) };
inner.into()
}
fn __unstable_as_raw_message(&self) -> *const std::ffi::c_void {
self.get_ptr(Private).raw().as_ptr() as *const _
}
}