use core::marker::PhantomData;
use crate::error_kind::ErrorKind;
pub struct ServiceReplyData<T: ?Sized> {
reply_message_ptr: *const u8,
reply_message_size: usize,
reply_message_error: Option<i64>,
_marker: PhantomData<T>,
}
impl<T: Sized> ServiceReplyData<T> {
pub fn new(reply_message_ptr: *const T, reply_message_size: usize, reply_message_error: Option<ErrorKind>) -> ServiceReplyData<T> {
ServiceReplyData {
reply_message_ptr: reply_message_ptr as *const u8,
reply_message_size,
reply_message_error: reply_message_error.map(|e| e.into()),
_marker: PhantomData,
}
}
pub fn get_reply_message_ref(&self) -> &T {
unsafe { &*(self.reply_message_ptr as *const T) }
}
pub fn get_reply_message_ptr(&self) -> *const u8 {
self.reply_message_ptr
}
pub fn get_reply_message_ptr_mut(&mut self) -> *mut u8 {
self.reply_message_ptr as *mut u8
}
pub fn get_reply_message_size(&self) -> usize {
self.reply_message_size
}
pub fn get_reply_message_error(&self) -> Option<i64> {
self.reply_message_error
}
pub fn set_reply_message_size(&mut self, reply_message_size: usize) {
self.reply_message_size = reply_message_size;
}
pub fn set_reply_message_error(&mut self, reply_message_error: Option<ErrorKind>) {
self.reply_message_error = reply_message_error.map(|e| e.into());
}
}