use super::Flags;
use crate::core::{MessageId, PacketIndex, PacketType};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct DataHeader {
pub flags: Flags,
pub message_id: MessageId,
pub packet_index: PacketIndex,
pub message_len: usize,
pub fragment_offset: usize,
}
impl DataHeader {
#[must_use]
pub const fn new(
flags: Flags,
message_id: MessageId,
packet_index: PacketIndex,
message_len: usize,
fragment_offset: usize,
) -> Self {
Self {
flags,
message_id,
packet_index,
message_len,
fragment_offset,
}
}
#[must_use]
pub const fn packet_type(self) -> PacketType {
PacketType::Data
}
#[must_use]
pub const fn is_ack_eliciting(self) -> bool {
self.flags.contains(Flags::ACK_ELICITING)
}
}
#[cfg(test)]
mod tests {
use super::DataHeader;
use crate::core::{Flags, MessageId, PacketIndex, PacketType};
#[test]
fn data_header_tracks_ack_eliciting_flag() {
let header = DataHeader::new(
Flags::ACK_ELICITING,
MessageId::new(7),
PacketIndex::new(2),
100,
20,
);
assert_eq!(header.packet_type(), PacketType::Data);
assert!(header.is_ack_eliciting());
}
}