use dust_dds::{ domain::domain_participant_factory::DomainParticipantFactory, infrastructure::{ qos::{DataWriterQos, QosKind}, qos_policy::{ DurabilityQosPolicy, DurabilityQosPolicyKind, ReliabilityQosPolicy, ReliabilityQosPolicyKind, }, status::{StatusKind, NO_STATUS}, time::{Duration, DurationKind}, wait_set::{Condition, WaitSet}, }, topic_definition::type_support::DdsType, }; #[derive(DdsType, Debug)] struct HelloWorldType { #[dust_dds(key)] id: u8, msg: String, } fn main() { let domain_id = 0; let participant_factory = DomainParticipantFactory::get_instance(); let participant = participant_factory .create_participant(domain_id, QosKind::Default, None, NO_STATUS) .unwrap(); let topic = participant .create_topic::( "HelloWorld", "HelloWorldType", QosKind::Default, None, NO_STATUS, ) .unwrap(); let publisher = participant .create_publisher(QosKind::Default, None, NO_STATUS) .unwrap(); let writer_qos = DataWriterQos { reliability: ReliabilityQosPolicy { kind: ReliabilityQosPolicyKind::Reliable, max_blocking_time: DurationKind::Finite(Duration::new(1, 0)), }, durability: DurabilityQosPolicy { kind: DurabilityQosPolicyKind::TransientLocal, }, ..Default::default() }; let writer = publisher .create_datawriter(&topic, QosKind::Specific(writer_qos), None, NO_STATUS) .unwrap(); let writer_cond = writer.get_statuscondition(); writer_cond .set_enabled_statuses(&[StatusKind::PublicationMatched]) .unwrap(); let mut wait_set = WaitSet::new(); wait_set .attach_condition(Condition::StatusCondition(writer_cond)) .unwrap(); wait_set.wait(Duration::new(60, 0)).unwrap(); let hello_world = HelloWorldType { id: 8, msg: "Hello world!".to_string(), }; writer.write(&hello_world, None).unwrap(); writer .wait_for_acknowledgments(Duration::new(30, 0)) .unwrap(); }