ros2_client/
message_info.rs

1//! Metadata for received `Message`s, such as `Timestamp`s and publisher id.
2use rustdds::{rpc::SampleIdentity, *};
3
4/// Message metadata
5#[derive(Debug, Clone)]
6pub struct MessageInfo {
7  received_timestamp: Timestamp,
8  source_timestamp: Option<Timestamp>,
9  sequence_number: SequenceNumber,
10  publisher: GUID,
11  related_sample_identity: Option<SampleIdentity>,
12}
13
14impl MessageInfo {
15  pub fn received_timestamp(&self) -> Timestamp {
16    self.received_timestamp
17  }
18
19  pub fn source_timestamp(&self) -> Option<Timestamp> {
20    self.source_timestamp
21  }
22
23  pub fn writer_guid(&self) -> GUID {
24    self.publisher
25  }
26
27  pub fn sample_identity(&self) -> rustdds::rpc::SampleIdentity {
28    rustdds::rpc::SampleIdentity {
29      writer_guid: self.writer_guid(),
30      sequence_number: self.sequence_number,
31    }
32  }
33
34  pub fn related_sample_identity(&self) -> Option<SampleIdentity> {
35    self.related_sample_identity
36  }
37}
38
39impl From<&SampleInfo> for MessageInfo {
40  fn from(sample_info: &SampleInfo) -> MessageInfo {
41    MessageInfo {
42      received_timestamp: Timestamp::ZERO, // TODO!
43      source_timestamp: sample_info.source_timestamp(),
44      sequence_number: sample_info.sample_identity().sequence_number,
45      publisher: sample_info.publication_handle(), // DDS has an odd name for this
46      related_sample_identity: sample_info.related_sample_identity(),
47    }
48  }
49}
50
51impl<M> From<&rustdds::no_key::DeserializedCacheChange<M>> for MessageInfo {
52  fn from(dcc: &rustdds::no_key::DeserializedCacheChange<M>) -> MessageInfo {
53    MessageInfo {
54      received_timestamp: Timestamp::ZERO, // TODO!
55      source_timestamp: dcc.source_timestamp(),
56      sequence_number: dcc.sequence_number,
57      publisher: dcc.writer_guid(),
58      related_sample_identity: dcc.related_sample_identity(),
59    }
60  }
61}