use super::message_type_details::MessageTypeDetails;
use crate::config;
use iceoryx2_bb_derive_macros::ZeroCopySend;
use iceoryx2_bb_elementary_traits::zero_copy_send::ZeroCopySend;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq, ZeroCopySend, Serialize, Deserialize)]
#[repr(C)]
pub struct StaticConfig {
pub(crate) max_subscribers: usize,
pub(crate) max_publishers: usize,
pub(crate) max_nodes: usize,
pub(crate) history_size: usize,
pub(crate) subscriber_max_buffer_size: usize,
pub(crate) subscriber_max_borrowed_samples: usize,
pub(crate) enable_safe_overflow: bool,
pub(crate) message_type_details: MessageTypeDetails,
}
impl StaticConfig {
pub(crate) fn new(config: &config::Config) -> Self {
Self {
max_subscribers: config.defaults.publish_subscribe.max_subscribers,
max_publishers: config.defaults.publish_subscribe.max_publishers,
max_nodes: config.defaults.publish_subscribe.max_nodes,
history_size: config.defaults.publish_subscribe.publisher_history_size,
subscriber_max_buffer_size: config
.defaults
.publish_subscribe
.subscriber_max_buffer_size,
subscriber_max_borrowed_samples: config
.defaults
.publish_subscribe
.subscriber_max_borrowed_samples,
enable_safe_overflow: config.defaults.publish_subscribe.enable_safe_overflow,
message_type_details: MessageTypeDetails::default(),
}
}
pub(crate) fn required_amount_of_samples_per_data_segment(
&self,
publisher_max_loaned_data: usize,
) -> usize {
self.max_subscribers
* (self.subscriber_max_buffer_size + self.subscriber_max_borrowed_samples)
+ self.history_size
+ publisher_max_loaned_data
}
pub fn max_nodes(&self) -> usize {
self.max_nodes
}
pub fn max_publishers(&self) -> usize {
self.max_publishers
}
pub fn max_subscribers(&self) -> usize {
self.max_subscribers
}
pub fn history_size(&self) -> usize {
self.history_size
}
pub fn subscriber_max_buffer_size(&self) -> usize {
self.subscriber_max_buffer_size
}
pub fn subscriber_max_borrowed_samples(&self) -> usize {
self.subscriber_max_borrowed_samples
}
pub fn has_safe_overflow(&self) -> bool {
self.enable_safe_overflow
}
pub fn message_type_details(&self) -> &MessageTypeDetails {
&self.message_type_details
}
}