1use crate::packet::ReceiveMetadata;
2use crate::subscription::SubscriptionId;
3use bytes::Bytes;
4use std::net::IpAddr;
5
6#[derive(Debug, Clone)]
8pub struct RawPacket {
9 pub subscription_id: SubscriptionId,
11 pub datagram: Bytes,
13 pub source_ip: Option<IpAddr>,
15 pub group: Option<IpAddr>,
17 pub ip_protocol: Option<u8>,
19 pub metadata: ReceiveMetadata,
21}
22
23impl RawPacket {
24 pub fn datagram_len(&self) -> usize {
26 self.datagram.len()
27 }
28
29 pub fn datagram(&self) -> &[u8] {
31 &self.datagram
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn raw_packet_datagram_len_returns_correct_length() {
41 let packet = RawPacket {
42 subscription_id: SubscriptionId(1),
43 datagram: Bytes::from_static(&[0x45, 0, 0, 1]),
44 source_ip: None,
45 group: None,
46 ip_protocol: Some(17),
47 metadata: ReceiveMetadata::empty(),
48 };
49
50 assert_eq!(packet.datagram_len(), 4);
51 }
52}