use super::*;
pub trait OwnedMessageInterop: SealedInternal {
fn __unstable_leak_raw_message(self) -> *mut std::ffi::c_void;
unsafe fn __unstable_take_ownership_of_raw_message(raw_message: *mut std::ffi::c_void) -> Self;
}
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 {
fn __unstable_as_raw_message_mut(&mut self) -> *mut std::ffi::c_void;
unsafe fn __unstable_wrap_raw_message_mut(raw: &'msg mut *mut std::ffi::c_void) -> Self;
unsafe fn __unstable_wrap_raw_message_mut_unchecked_lifetime(
raw: *mut std::ffi::c_void,
) -> Self;
}
#[cfg(not(lite_runtime))]
pub trait MessageDescriptorInterop {
fn __unstable_get_descriptor() -> *const std::ffi::c_void;
}
impl<'a, T> MessageMutInterop<'a> for T
where
Self: AsMut + CppGetRawMessageMut + From<MessageMutInner<'a, <Self as AsMut>::MutProxied>>,
<Self as AsMut>::MutProxied: Message,
{
unsafe fn __unstable_wrap_raw_message_mut(msg: &'a mut *mut std::ffi::c_void) -> Self {
let raw = RawMessage::new(*msg as *mut _).unwrap();
let inner = unsafe { MessageMutInner::wrap_raw(raw) };
inner.into()
}
unsafe fn __unstable_wrap_raw_message_mut_unchecked_lifetime(
msg: *mut std::ffi::c_void,
) -> Self {
let raw = RawMessage::new(msg as *mut _).unwrap();
let inner = unsafe { MessageMutInner::wrap_raw(raw) };
inner.into()
}
fn __unstable_as_raw_message_mut(&mut self) -> *mut std::ffi::c_void {
self.get_raw_message_mut(Private).as_ptr() as *mut _
}
}