rustdds/ros2/
builtin_topics.rs

1use crate::{
2  dds::qos::{
3    policy::{
4      Deadline, DestinationOrder, Durability, History, LatencyBudget, Lifespan, Liveliness,
5      Ownership, Reliability,
6    },
7    QosPolicies,
8  },
9  structure::duration::Duration,
10};
11
12pub struct ROSDiscoveryTopic {}
13
14impl ROSDiscoveryTopic {
15  const QOS: QosPolicies = QosPolicies {
16    durability: Some(Durability::TransientLocal),
17    presentation: None,
18    deadline: Some(Deadline(Duration::INFINITE)),
19    latency_budget: Some(LatencyBudget {
20      duration: Duration::ZERO,
21    }),
22    ownership: Some(Ownership::Shared),
23    liveliness: Some(Liveliness::Automatic {
24      lease_duration: Duration::INFINITE,
25    }),
26    time_based_filter: None,
27    reliability: Some(Reliability::Reliable {
28      max_blocking_time: Duration::ZERO,
29    }),
30    destination_order: Some(DestinationOrder::ByReceptionTimestamp),
31    history: Some(History::KeepLast { depth: 1 }),
32    resource_limits: None,
33    lifespan: Some(Lifespan {
34      duration: Duration::INFINITE,
35    }),
36    #[cfg(feature = "security")]
37    property: None,
38  };
39
40  const TOPIC_NAME: &'static str = "ros_discovery_info";
41  const TYPE_NAME: &'static str = "rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_";
42
43  pub fn topic_name() -> &'static str {
44    Self::TOPIC_NAME
45  }
46
47  pub fn type_name() -> &'static str {
48    Self::TYPE_NAME
49  }
50
51  pub const fn qos() -> QosPolicies {
52    Self::QOS
53  }
54}
55
56pub struct ParameterEventsTopic {}
57
58impl ParameterEventsTopic {
59  const QOS: QosPolicies = QosPolicies {
60    durability: Some(Durability::TransientLocal),
61    presentation: None,
62    deadline: None,
63    latency_budget: None,
64    ownership: None,
65    liveliness: None,
66    time_based_filter: None,
67    reliability: Some(Reliability::Reliable {
68      max_blocking_time: Duration::ZERO,
69    }),
70    destination_order: None,
71    history: Some(History::KeepLast { depth: 1 }),
72    resource_limits: None,
73    lifespan: None,
74    #[cfg(feature = "security")]
75    property: None,
76  };
77
78  const TOPIC_NAME: &'static str = "rt/parameter_events";
79  const TYPE_NAME: &'static str = "rcl_interfaces::msg::dds_::ParameterEvent_";
80
81  pub fn topic_name() -> &'static str {
82    Self::TOPIC_NAME
83  }
84
85  pub fn type_name() -> &'static str {
86    Self::TYPE_NAME
87  }
88
89  pub fn qos() -> QosPolicies {
90    Self::QOS
91  }
92}
93
94pub struct RosOutTopic {}
95
96impl RosOutTopic {
97  const QOS: QosPolicies = QosPolicies {
98    durability: Some(Durability::TransientLocal),
99    presentation: None,
100    deadline: Some(Deadline(Duration::INFINITE)),
101    latency_budget: Some(LatencyBudget {
102      duration: Duration::ZERO,
103    }),
104    ownership: Some(Ownership::Shared),
105    liveliness: Some(Liveliness::Automatic {
106      lease_duration: Duration::INFINITE,
107    }),
108    time_based_filter: None,
109    reliability: Some(Reliability::Reliable {
110      max_blocking_time: Duration::ZERO,
111    }),
112    destination_order: Some(DestinationOrder::ByReceptionTimestamp),
113    history: Some(History::KeepLast { depth: 1 }),
114    resource_limits: None,
115    lifespan: Some(Lifespan {
116      duration: Duration::from_secs(10),
117    }),
118    #[cfg(feature = "security")]
119    property: None,
120  };
121
122  const TOPIC_NAME: &'static str = "rt/rosout";
123  const TYPE_NAME: &'static str = "rcl_interfaces::msg::dds_::Log_";
124
125  pub fn topic_name() -> &'static str {
126    Self::TOPIC_NAME
127  }
128
129  pub fn type_name() -> &'static str {
130    Self::TYPE_NAME
131  }
132
133  pub fn qos() -> QosPolicies {
134    Self::QOS
135  }
136}