pub use zerodds_qos::{
DeadlineQosPolicy, DestinationOrderKind, DestinationOrderQosPolicy, DurabilityKind,
DurabilityQosPolicy, DurabilityServiceQosPolicy, EntityFactoryQosPolicy, GroupDataQosPolicy,
HistoryKind, HistoryQosPolicy, LatencyBudgetQosPolicy, LifespanQosPolicy, LivelinessKind,
LivelinessQosPolicy, OwnershipKind, OwnershipQosPolicy, OwnershipStrengthQosPolicy,
PartitionQosPolicy, PresentationAccessScope, PresentationQosPolicy,
ReaderDataLifecycleQosPolicy, ReliabilityKind, ReliabilityQosPolicy, ResourceLimitsQosPolicy,
TimeBasedFilterQosPolicy, TopicDataQosPolicy, TransportPriorityQosPolicy, UserDataQosPolicy,
WriterDataLifecycleQosPolicy,
};
use zerodds_qos::Duration;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DataWriterQos {
pub reliability: ReliabilityQosPolicy,
pub durability: DurabilityQosPolicy,
pub durability_service: DurabilityServiceQosPolicy,
pub deadline: DeadlineQosPolicy,
pub latency_budget: LatencyBudgetQosPolicy,
pub liveliness: LivelinessQosPolicy,
pub destination_order: DestinationOrderQosPolicy,
pub lifespan: LifespanQosPolicy,
pub ownership: OwnershipQosPolicy,
pub ownership_strength: OwnershipStrengthQosPolicy,
pub partition: PartitionQosPolicy,
pub presentation: PresentationQosPolicy,
pub history: HistoryQosPolicy,
pub resource_limits: ResourceLimitsQosPolicy,
pub transport_priority: TransportPriorityQosPolicy,
pub writer_data_lifecycle: WriterDataLifecycleQosPolicy,
pub user_data: UserDataQosPolicy,
pub topic_data: TopicDataQosPolicy,
pub group_data: GroupDataQosPolicy,
pub data_representation: Option<alloc::vec::Vec<i16>>,
}
impl Default for DataWriterQos {
fn default() -> Self {
Self {
reliability: ReliabilityQosPolicy {
kind: ReliabilityKind::Reliable,
max_blocking_time: Duration::from_millis(100_i32),
},
durability: DurabilityQosPolicy {
kind: DurabilityKind::Volatile,
},
durability_service: DurabilityServiceQosPolicy::default(),
deadline: DeadlineQosPolicy::default(),
latency_budget: LatencyBudgetQosPolicy::default(),
liveliness: LivelinessQosPolicy::default(),
destination_order: DestinationOrderQosPolicy::default(),
lifespan: LifespanQosPolicy::default(),
ownership: OwnershipQosPolicy::default(),
ownership_strength: OwnershipStrengthQosPolicy::default(),
partition: PartitionQosPolicy::default(),
presentation: PresentationQosPolicy::default(),
history: HistoryQosPolicy {
kind: HistoryKind::KeepLast,
depth: 1,
},
resource_limits: ResourceLimitsQosPolicy {
max_samples: 1000_i32,
max_instances: 10_i32,
max_samples_per_instance: 100_i32,
},
transport_priority: TransportPriorityQosPolicy::default(),
writer_data_lifecycle: WriterDataLifecycleQosPolicy::default(),
user_data: UserDataQosPolicy::default(),
topic_data: TopicDataQosPolicy::default(),
group_data: GroupDataQosPolicy::default(),
data_representation: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DataReaderQos {
pub reliability: ReliabilityQosPolicy,
pub durability: DurabilityQosPolicy,
pub deadline: DeadlineQosPolicy,
pub latency_budget: LatencyBudgetQosPolicy,
pub liveliness: LivelinessQosPolicy,
pub destination_order: DestinationOrderQosPolicy,
pub ownership: OwnershipQosPolicy,
pub partition: PartitionQosPolicy,
pub presentation: PresentationQosPolicy,
pub history: HistoryQosPolicy,
pub resource_limits: ResourceLimitsQosPolicy,
pub time_based_filter: TimeBasedFilterQosPolicy,
pub reader_data_lifecycle: ReaderDataLifecycleQosPolicy,
pub user_data: UserDataQosPolicy,
pub topic_data: TopicDataQosPolicy,
pub group_data: GroupDataQosPolicy,
pub data_representation: Option<alloc::vec::Vec<i16>>,
}
impl Default for DataReaderQos {
fn default() -> Self {
Self {
reliability: ReliabilityQosPolicy {
kind: ReliabilityKind::BestEffort,
max_blocking_time: Duration::from_millis(100_i32),
},
durability: DurabilityQosPolicy {
kind: DurabilityKind::Volatile,
},
deadline: DeadlineQosPolicy::default(),
latency_budget: LatencyBudgetQosPolicy::default(),
liveliness: LivelinessQosPolicy::default(),
destination_order: DestinationOrderQosPolicy::default(),
ownership: OwnershipQosPolicy::default(),
partition: PartitionQosPolicy::default(),
presentation: PresentationQosPolicy::default(),
history: HistoryQosPolicy {
kind: HistoryKind::KeepLast,
depth: 1,
},
resource_limits: ResourceLimitsQosPolicy {
max_samples: 1000_i32,
max_instances: 10_i32,
max_samples_per_instance: 100_i32,
},
time_based_filter: TimeBasedFilterQosPolicy::default(),
reader_data_lifecycle: ReaderDataLifecycleQosPolicy::default(),
user_data: UserDataQosPolicy::default(),
topic_data: TopicDataQosPolicy::default(),
group_data: GroupDataQosPolicy::default(),
data_representation: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct TopicQos {
pub durability: DurabilityQosPolicy,
pub durability_service: DurabilityServiceQosPolicy,
pub deadline: DeadlineQosPolicy,
pub latency_budget: LatencyBudgetQosPolicy,
pub liveliness: LivelinessQosPolicy,
pub reliability: ReliabilityQosPolicy,
pub destination_order: DestinationOrderQosPolicy,
pub history: HistoryQosPolicy,
pub resource_limits: ResourceLimitsQosPolicy,
pub transport_priority: TransportPriorityQosPolicy,
pub lifespan: LifespanQosPolicy,
pub ownership: OwnershipQosPolicy,
pub topic_data: TopicDataQosPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct DomainParticipantQos {
pub user_data: UserDataQosPolicy,
pub entity_factory: EntityFactoryQosPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct PublisherQos {
pub presentation: PresentationQosPolicy,
pub partition: PartitionQosPolicy,
pub group_data: GroupDataQosPolicy,
pub entity_factory: EntityFactoryQosPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct SubscriberQos {
pub presentation: PresentationQosPolicy,
pub partition: PartitionQosPolicy,
pub group_data: GroupDataQosPolicy,
pub entity_factory: EntityFactoryQosPolicy,
}
impl From<zerodds_qos::WriterQos> for DataWriterQos {
fn from(w: zerodds_qos::WriterQos) -> Self {
Self {
durability: w.durability,
durability_service: w.durability_service,
deadline: w.deadline,
latency_budget: w.latency_budget,
liveliness: w.liveliness,
reliability: w.reliability,
destination_order: w.destination_order,
history: w.history,
resource_limits: w.resource_limits,
transport_priority: w.transport_priority,
lifespan: w.lifespan,
ownership: w.ownership,
ownership_strength: w.ownership_strength,
presentation: w.presentation,
partition: w.partition,
writer_data_lifecycle: w.writer_data_lifecycle,
user_data: w.user_data,
topic_data: w.topic_data,
group_data: w.group_data,
..Self::default()
}
}
}
impl From<zerodds_qos::ReaderQos> for DataReaderQos {
fn from(r: zerodds_qos::ReaderQos) -> Self {
Self {
durability: r.durability,
deadline: r.deadline,
latency_budget: r.latency_budget,
liveliness: r.liveliness,
reliability: r.reliability,
destination_order: r.destination_order,
history: r.history,
resource_limits: r.resource_limits,
ownership: r.ownership,
time_based_filter: r.time_based_filter,
presentation: r.presentation,
partition: r.partition,
reader_data_lifecycle: r.reader_data_lifecycle,
user_data: r.user_data,
topic_data: r.topic_data,
group_data: r.group_data,
..Self::default()
}
}
}
#[cfg(test)]
mod data_representation_tests {
use super::{DataReaderQos, DataWriterQos};
#[test]
fn data_representation_defaults_none_and_settable() {
assert_eq!(DataWriterQos::default().data_representation, None);
assert_eq!(DataReaderQos::default().data_representation, None);
let r = DataReaderQos {
data_representation: Some(alloc::vec![0_i16, 2]), ..Default::default()
};
assert_eq!(r.data_representation.as_deref(), Some(&[0_i16, 2][..]));
let w = DataWriterQos {
data_representation: Some(alloc::vec![0_i16]), ..Default::default()
};
assert_eq!(w.data_representation.as_deref(), Some(&[0_i16][..]));
}
#[test]
fn from_qos_aggregate_carries_policies() {
use zerodds_qos::{HistoryKind, ReliabilityKind};
let mut w = zerodds_qos::WriterQos::default();
w.history.kind = HistoryKind::KeepLast;
w.history.depth = 42;
w.reliability.kind = ReliabilityKind::Reliable;
let dw: DataWriterQos = w.into();
assert_eq!(dw.history.depth, 42);
assert_eq!(dw.reliability.kind, ReliabilityKind::Reliable);
assert_eq!(dw.data_representation, None);
let mut rq = zerodds_qos::ReaderQos::default();
rq.history.depth = 7;
let dr: DataReaderQos = rq.into();
assert_eq!(dr.history.depth, 7);
assert_eq!(dr.data_representation, None);
}
}