openthread/ot/types/
history_tracker.rs1use crate::prelude_internal::*;
6
7use num_derive::FromPrimitive;
8
9#[derive(Debug, Default, Clone)]
13#[repr(transparent)]
14pub struct HistoryTrackerNetworkInfo(pub otHistoryTrackerNetworkInfo);
15
16impl_ot_castable!(HistoryTrackerNetworkInfo, otHistoryTrackerNetworkInfo);
17
18impl HistoryTrackerNetworkInfo {
19 pub fn role(&self) -> DeviceRole {
21 DeviceRole::from(self.0.mRole)
22 }
23
24 pub fn mode(&self) -> LinkModeConfig {
26 LinkModeConfig::from(self.0.mMode)
27 }
28
29 pub fn rloc16(&self) -> u16 {
31 self.0.mRloc16
32 }
33
34 pub fn partition_id(&self) -> u32 {
36 self.0.mPartitionId
37 }
38}
39
40#[derive(Debug, Copy, Clone, Eq, Ord, PartialOrd, PartialEq, FromPrimitive)]
44#[allow(missing_docs)]
45pub enum HistoryTrackerNeighborEvent {
46 Added = OT_HISTORY_TRACKER_NEIGHBOR_EVENT_ADDED as isize,
48
49 Removed = OT_HISTORY_TRACKER_NEIGHBOR_EVENT_REMOVED as isize,
51
52 Changed = OT_HISTORY_TRACKER_NEIGHBOR_EVENT_CHANGED as isize,
54
55 Restoring = OT_HISTORY_TRACKER_NEIGHBOR_EVENT_RESTORING as isize,
57}
58
59impl From<otHistoryTrackerNeighborEvent> for HistoryTrackerNeighborEvent {
60 fn from(x: otHistoryTrackerNeighborEvent) -> Self {
61 use num::FromPrimitive;
62 Self::from_u32(x)
63 .unwrap_or_else(|| panic!("Unknown otHistoryTrackerNeighborEvent value: {x}"))
64 }
65}
66
67#[derive(Debug, Default, Clone)]
71#[repr(transparent)]
72pub struct HistoryTrackerNeighborInfo(pub otHistoryTrackerNeighborInfo);
73
74impl_ot_castable!(HistoryTrackerNeighborInfo, otHistoryTrackerNeighborInfo);
75
76impl HistoryTrackerNeighborInfo {
77 pub fn ext_address(&self) -> ExtAddress {
79 ExtAddress(self.0.mExtAddress)
80 }
81
82 pub fn rloc16(&self) -> u16 {
84 self.0.mRloc16
85 }
86
87 pub fn avg_rssi(&self) -> i8 {
89 self.0.mAverageRssi
90 }
91
92 pub fn event(&self) -> HistoryTrackerNeighborEvent {
94 HistoryTrackerNeighborEvent::from(self.0.mEvent() as u32)
95 }
96
97 pub fn rx_on_while_idle(&self) -> bool {
99 self.0.mRxOnWhenIdle()
100 }
101
102 pub fn full_thread_device(&self) -> bool {
104 self.0.mFullThreadDevice()
105 }
106
107 pub fn full_network_data(&self) -> bool {
109 self.0.mFullNetworkData()
110 }
111
112 pub fn is_child(&self) -> bool {
114 self.0.mIsChild()
115 }
116}
117
118#[derive(Debug, Copy, Clone, Eq, Ord, PartialOrd, PartialEq, FromPrimitive)]
122#[allow(missing_docs)]
123pub enum HistoryTrackerRouterEvent {
124 Added = OT_HISTORY_TRACKER_ROUTER_EVENT_ADDED as isize,
126
127 Removed = OT_HISTORY_TRACKER_ROUTER_EVENT_REMOVED as isize,
129
130 NextHopChanged = OT_HISTORY_TRACKER_ROUTER_EVENT_NEXT_HOP_CHANGED as isize,
132
133 PathCostChanged = OT_HISTORY_TRACKER_ROUTER_EVENT_COST_CHANGED as isize,
135}
136
137impl From<otHistoryTrackerRouterEvent> for HistoryTrackerRouterEvent {
138 fn from(x: otHistoryTrackerRouterEvent) -> Self {
139 use num::FromPrimitive;
140 Self::from_u32(x)
141 .unwrap_or_else(|| panic!("Unknown otHistoryTrackerRouterEvent value: {x}"))
142 }
143}
144
145#[derive(Debug, Default, Clone)]
149#[repr(transparent)]
150pub struct HistoryTrackerRouterInfo(pub otHistoryTrackerRouterInfo);
151
152impl_ot_castable!(HistoryTrackerRouterInfo, otHistoryTrackerRouterInfo);
153
154impl HistoryTrackerRouterInfo {
155 pub fn event(&self) -> HistoryTrackerRouterEvent {
157 HistoryTrackerRouterEvent::from(self.0.mEvent() as u32)
158 }
159
160 pub fn router_id(&self) -> u8 {
162 self.0.mRouterId()
163 }
164
165 pub fn next_hop(&self) -> u8 {
167 self.0.mNextHop
168 }
169
170 pub fn old_path_cost(&self) -> u8 {
172 self.0.mOldPathCost()
173 }
174
175 pub fn path_cost(&self) -> u8 {
177 self.0.mPathCost()
178 }
179}
180
181#[derive(Debug, Copy, Clone, Eq, Ord, PartialOrd, PartialEq, FromPrimitive)]
185#[allow(missing_docs)]
186pub enum HistoryTrackerNetDataEvent {
187 Added = OT_HISTORY_TRACKER_ROUTER_EVENT_ADDED as isize,
189
190 Removed = OT_HISTORY_TRACKER_NET_DATA_ENTRY_REMOVED as isize,
192}
193
194impl From<otHistoryTrackerNetDataEvent> for HistoryTrackerNetDataEvent {
195 fn from(x: otHistoryTrackerNetDataEvent) -> Self {
196 use num::FromPrimitive;
197 Self::from_u32(x)
198 .unwrap_or_else(|| panic!("Unknown otHistoryTrackerNetDataEvent value: {x}"))
199 }
200}
201
202#[derive(Default, Clone)]
206#[repr(transparent)]
207pub struct HistoryTrackerOnMeshPrefixInfo(pub otHistoryTrackerOnMeshPrefixInfo);
208
209impl_ot_castable!(HistoryTrackerOnMeshPrefixInfo, otHistoryTrackerOnMeshPrefixInfo);
210
211impl HistoryTrackerOnMeshPrefixInfo {
212 pub fn prefix(&self) -> BorderRouterConfig {
214 BorderRouterConfig(self.0.mPrefix)
215 }
216
217 pub fn event(&self) -> HistoryTrackerNetDataEvent {
219 HistoryTrackerNetDataEvent::from(self.0.mEvent)
220 }
221}
222
223impl std::fmt::Debug for HistoryTrackerOnMeshPrefixInfo {
224 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
225 let mut ds = f.debug_struct("HistoryTrackerOnMeshPrefixInfo");
226 ds.field("on-mesh prefix", &self.prefix());
227 ds.field("event", &self.event());
228 ds.finish()
229 }
230}
231
232#[derive(Default, Clone)]
236#[repr(transparent)]
237pub struct HistoryTrackerExternalRouteInfo(pub otHistoryTrackerExternalRouteInfo);
238
239impl_ot_castable!(HistoryTrackerExternalRouteInfo, otHistoryTrackerExternalRouteInfo);
240
241impl HistoryTrackerExternalRouteInfo {
242 pub fn route(&self) -> ExternalRouteConfig {
244 ExternalRouteConfig(self.0.mRoute)
245 }
246
247 pub fn event(&self) -> HistoryTrackerNetDataEvent {
249 HistoryTrackerNetDataEvent::from(self.0.mEvent)
250 }
251}
252
253impl std::fmt::Debug for HistoryTrackerExternalRouteInfo {
254 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
255 let mut ds = f.debug_struct("HistoryTrackerExternalRouteInfo");
256 ds.field("external route", &self.route());
257 ds.field("event", &self.event());
258 ds.finish()
259 }
260}