use iceoryx2_bb_derive_macros::ZeroCopySend;
use iceoryx2_bb_elementary_traits::zero_copy_send::ZeroCopySend;
use serde::{Deserialize, Serialize};
use crate::config;
use super::message_type_details::MessageTypeDetails;
#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq, ZeroCopySend, Serialize, Deserialize)]
#[repr(C)]
pub struct StaticConfig {
pub(crate) enable_safe_overflow_for_requests: bool,
pub(crate) enable_safe_overflow_for_responses: bool,
pub(crate) enable_fire_and_forget_requests: bool,
pub(crate) max_active_requests_per_client: usize,
pub(crate) max_loaned_requests: usize,
pub(crate) max_response_buffer_size: usize,
pub(crate) max_servers: usize,
pub(crate) max_clients: usize,
pub(crate) max_nodes: usize,
pub(crate) max_borrowed_responses_per_pending_response: usize,
pub(crate) request_message_type_details: MessageTypeDetails,
pub(crate) response_message_type_details: MessageTypeDetails,
}
impl StaticConfig {
pub(crate) fn new(config: &config::Config) -> Self {
Self {
enable_safe_overflow_for_requests: config
.defaults
.request_response
.enable_safe_overflow_for_requests,
enable_safe_overflow_for_responses: config
.defaults
.request_response
.enable_safe_overflow_for_responses,
max_active_requests_per_client: config
.defaults
.request_response
.max_active_requests_per_client,
max_response_buffer_size: config.defaults.request_response.max_response_buffer_size,
max_servers: config.defaults.request_response.max_servers,
max_clients: config.defaults.request_response.max_clients,
max_nodes: config.defaults.request_response.max_nodes,
max_borrowed_responses_per_pending_response: config
.defaults
.request_response
.max_borrowed_responses_per_pending_response,
max_loaned_requests: config.defaults.request_response.max_loaned_requests,
enable_fire_and_forget_requests: config
.defaults
.request_response
.enable_fire_and_forget_requests,
request_message_type_details: MessageTypeDetails::default(),
response_message_type_details: MessageTypeDetails::default(),
}
}
pub(crate) fn required_amount_of_chunks_per_client_data_segment(
&self,
client_max_loaned_data: usize,
) -> usize {
self.max_servers * (
self.max_active_requests_per_client +
self.max_active_requests_per_client
)
+ client_max_loaned_data
}
pub(crate) fn required_amount_of_chunks_per_server_data_segment(
&self,
max_loaned_responses_per_request: usize,
) -> usize {
self.max_clients
* (
self.max_active_requests_per_client +
self.max_active_requests_per_client
)
* (self.max_response_buffer_size
+ self.max_borrowed_responses_per_pending_response
+ max_loaned_responses_per_request)
}
pub fn request_message_type_details(&self) -> &MessageTypeDetails {
&self.request_message_type_details
}
pub fn response_message_type_details(&self) -> &MessageTypeDetails {
&self.response_message_type_details
}
pub fn has_safe_overflow_for_requests(&self) -> bool {
self.enable_safe_overflow_for_requests
}
pub fn has_safe_overflow_for_responses(&self) -> bool {
self.enable_safe_overflow_for_responses
}
pub fn does_support_fire_and_forget_requests(&self) -> bool {
self.enable_fire_and_forget_requests
}
pub fn max_borrowed_responses_per_pending_response(&self) -> usize {
self.max_borrowed_responses_per_pending_response
}
pub fn max_active_requests_per_client(&self) -> usize {
self.max_active_requests_per_client
}
pub fn max_response_buffer_size(&self) -> usize {
self.max_response_buffer_size
}
pub fn max_loaned_requests(&self) -> usize {
self.max_loaned_requests
}
pub fn max_servers(&self) -> usize {
self.max_servers
}
pub fn max_clients(&self) -> usize {
self.max_clients
}
pub fn max_nodes(&self) -> usize {
self.max_nodes
}
}