#[cfg(test)]
use std::ffi::CString;
use crate::command::correlated_message_flyweight::{CorrelatedMessageDefn, CorrelatedMessageFlyweight};
use crate::concurrent::atomic_buffer::AtomicBuffer;
use crate::utils::types::Index;
#[repr(C, packed(4))]
#[derive(Copy, Clone)]
pub(crate) struct PublicationMessageDefn {
correlated_message: CorrelatedMessageDefn,
stream_id: i32,
channel_length: i32,
channel_data: [i8; 1],
}
pub(crate) struct PublicationMessageFlyweight {
correlated_message_flyweight: CorrelatedMessageFlyweight,
m_struct: *mut PublicationMessageDefn, }
impl PublicationMessageFlyweight {
pub fn new(buffer: AtomicBuffer, offset: Index) -> Self {
let correlated_message_flyweight = CorrelatedMessageFlyweight::new(buffer, offset);
let m_struct = correlated_message_flyweight
.flyweight
.overlay_struct::<PublicationMessageDefn>(0);
Self {
correlated_message_flyweight,
m_struct,
}
}
#[cfg(test)]
pub fn stream_id(&self) -> i32 {
unsafe { (*self.m_struct).stream_id }
}
#[inline]
pub fn set_stream_id(&mut self, value: i32) {
unsafe {
(*self.m_struct).stream_id = value;
}
}
#[cfg(test)]
pub fn channel(&self) -> CString {
self.correlated_message_flyweight
.flyweight
.string_get(offset_of!(PublicationMessageDefn, channel_length) as Index)
}
#[inline]
pub fn set_channel(&mut self, value: &[u8]) {
self.correlated_message_flyweight
.flyweight
.string_put(offset_of!(PublicationMessageDefn, channel_length) as Index, value);
}
#[inline]
pub fn length(&self) -> Index {
unsafe { offset_of!(PublicationMessageDefn, channel_data) as Index + (*self.m_struct).channel_length as Index }
}
#[cfg(test)]
pub fn correlation_id(&self) -> i64 {
self.correlated_message_flyweight.correlation_id()
}
#[inline]
pub fn set_client_id(&mut self, value: i64) {
self.correlated_message_flyweight.set_client_id(value);
}
#[inline]
pub fn set_correlation_id(&mut self, value: i64) {
self.correlated_message_flyweight.set_correlation_id(value);
}
}