pub struct GuidPrefix(pub [u8; 12]);Expand description
GUID Prefix (12 bytes)
Uniquely identifies a participant on the network.
Tuple Fields§
§0: [u8; 12]Implementations§
Source§impl GuidPrefix
impl GuidPrefix
Sourcepub const fn as_bytes(&self) -> &[u8; 12]
pub const fn as_bytes(&self) -> &[u8; 12]
Get bytes
Examples found in repository?
examples/test_encoding.rs (line 23)
12fn main() {
13 println!("=== HDDS Micro Encoding Test ===\n");
14
15 // Create a null transport (captures sent data)
16 let transport = NullTransport::default();
17
18 // Create participant
19 let mut participant = MicroParticipant::new(0, transport).unwrap();
20 let guid_prefix = participant.guid_prefix();
21 let entity_id = participant.allocate_entity_id(true);
22
23 println!("GUID Prefix: {:02X?}", guid_prefix.as_bytes());
24 println!("Entity ID: {:02X?}", entity_id.as_bytes());
25
26 // Create writer (for demonstration, not used in this encoding test)
27 let dest = Locator::udpv4([239, 255, 0, 1], 7400);
28 let _writer = MicroWriter::new(guid_prefix, entity_id, "test/topic", dest).unwrap();
29
30 // Encode temperature-like payload: sensor_id(4) + value(4) + timestamp(8)
31 let mut buf = [0u8; 32];
32 let mut encoder = CdrEncoder::new(&mut buf);
33 encoder.encode_u32(0x42).unwrap(); // sensor_id
34 encoder.encode_f32(25.5).unwrap(); // temperature
35 encoder.encode_u64(12345678).unwrap(); // timestamp
36 let payload = encoder.finish();
37
38 println!("Payload ({} bytes): {:02X?}", payload.len(), payload);
39
40 // Build the packet manually to inspect bytes
41 let mut packet = [0u8; 256];
42
43 // RTPS Header (20 bytes)
44 let header = hdds_micro::rtps::RtpsHeader::new(
45 hdds_micro::rtps::ProtocolVersion::RTPS_2_5,
46 hdds_micro::rtps::VendorId::HDDS,
47 guid_prefix,
48 );
49 let header_len = header.encode(&mut packet).unwrap();
50
51 // DATA submessage
52 let data = hdds_micro::rtps::submessages::Data::new(
53 EntityId::UNKNOWN,
54 entity_id,
55 hdds_micro::rtps::SequenceNumber::new(1),
56 );
57 let data_len = data.encode_header(&mut packet[header_len..]).unwrap();
58
59 // Copy payload
60 let payload_offset = header_len + data_len;
61 packet[payload_offset..payload_offset + payload.len()].copy_from_slice(payload);
62
63 let total_len = payload_offset + payload.len();
64
65 // Update octets_to_next
66 let octets_to_next = (20 + payload.len()) as u16;
67 packet[header_len + 2] = (octets_to_next & 0xff) as u8;
68 packet[header_len + 3] = ((octets_to_next >> 8) & 0xff) as u8;
69
70 println!("\n=== Complete RTPS Packet ({} bytes) ===", total_len);
71
72 // Print in rows of 16
73 for i in (0..total_len).step_by(16) {
74 print!("{:04X} ", i);
75 for &byte in &packet[i..std::cmp::min(i + 16, total_len)] {
76 print!("{:02X} ", byte);
77 }
78 println!();
79 }
80
81 println!("\n=== Key Bytes Analysis ===");
82 println!(
83 "Bytes 0-3 (RTPS magic): {:02X} {:02X} {:02X} {:02X} = '{}'",
84 packet[0],
85 packet[1],
86 packet[2],
87 packet[3],
88 std::str::from_utf8(&packet[0..4]).unwrap_or("???")
89 );
90 println!("Bytes 4-5 (version): {:02X} {:02X}", packet[4], packet[5]);
91 println!("Bytes 6-7 (vendor): {:02X} {:02X}", packet[6], packet[7]);
92 println!("Bytes 8-19 (GUID prefix): {:02X?}", &packet[8..20]);
93 println!(
94 "Byte 20 (submsg kind): {:02X} (expected: 0x15 for DATA)",
95 packet[20]
96 );
97 println!(
98 "Byte 21 (submsg flags): {:02X} (expected: 0x05)",
99 packet[21]
100 );
101 println!(
102 "Bytes 22-23 (octetsToNext): {:02X} {:02X} = {} bytes",
103 packet[22],
104 packet[23],
105 u16::from_le_bytes([packet[22], packet[23]])
106 );
107
108 // Verify
109 if packet[20] == 0x15 {
110 println!("\n✓ Submessage kind is correct (0x15)");
111 } else {
112 println!(
113 "\n✗ ERROR: Submessage kind is wrong: 0x{:02X} instead of 0x15",
114 packet[20]
115 );
116 }
117}Trait Implementations§
Source§impl Clone for GuidPrefix
impl Clone for GuidPrefix
Source§fn clone(&self) -> GuidPrefix
fn clone(&self) -> GuidPrefix
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for GuidPrefix
impl Debug for GuidPrefix
Source§impl Default for GuidPrefix
impl Default for GuidPrefix
Source§impl Hash for GuidPrefix
impl Hash for GuidPrefix
Source§impl PartialEq for GuidPrefix
impl PartialEq for GuidPrefix
impl Copy for GuidPrefix
impl Eq for GuidPrefix
impl StructuralPartialEq for GuidPrefix
Auto Trait Implementations§
impl Freeze for GuidPrefix
impl RefUnwindSafe for GuidPrefix
impl Send for GuidPrefix
impl Sync for GuidPrefix
impl Unpin for GuidPrefix
impl UnsafeUnpin for GuidPrefix
impl UnwindSafe for GuidPrefix
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more