barectf_parser/types/
packet.rs1use crate::{
2 config::ClockType,
3 types::{Event, EventCount, FieldValue, SequenceNumber, StreamId, Timestamp},
4};
5use internment::Intern;
6use serde::{Deserialize, Serialize};
7use uuid::Uuid;
8
9#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
10pub struct Packet {
11 pub header: PacketHeader,
12 pub context: PacketContext,
13 pub events: Vec<Event>,
14}
15
16#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
17pub struct PacketHeader {
18 pub magic_number: Option<u32>,
20 pub trace_uuid: Option<Uuid>,
22 pub stream_id: StreamId,
24 pub stream_name: Intern<String>,
26 pub clock_name: Option<Intern<String>>,
28 pub clock_type: Option<Intern<ClockType>>,
30}
31
32impl PacketHeader {
33 pub const MAGIC: u32 = 0xC1FC_1FC1;
34}
35
36#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
37pub struct PacketContext {
38 pub packet_size_bits: usize,
40 pub content_size_bits: usize,
42 pub beginning_timestamp: Option<Timestamp>,
44 pub end_timestamp: Option<Timestamp>,
46 pub events_discarded: Option<EventCount>,
50 pub sequence_number: Option<SequenceNumber>,
52 pub extra_members: Vec<(Intern<String>, FieldValue)>,
54}
55
56impl PacketContext {
57 pub fn packet_size(&self) -> usize {
59 self.packet_size_bits >> 3
60 }
61
62 pub fn content_size(&self) -> usize {
64 self.content_size_bits >> 3
65 }
66}