barectf_parser/types/
packet.rs1use crate::types::{Event, EventCount, FieldValue, SequenceNumber, StreamId, Timestamp};
2use internment::Intern;
3use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
7pub struct Packet {
8 pub header: PacketHeader,
9 pub context: PacketContext,
10 pub events: Vec<Event>,
11}
12
13#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
14pub struct PacketHeader {
15 pub magic_number: Option<u32>,
17 pub trace_uuid: Option<Uuid>,
19 pub stream_id: StreamId,
21 pub stream_name: Intern<String>,
23 pub clock_name: Option<Intern<String>>,
25}
26
27impl PacketHeader {
28 pub const MAGIC: u32 = 0xC1FC_1FC1;
29}
30
31#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
32pub struct PacketContext {
33 pub packet_size_bits: usize,
35 pub content_size_bits: usize,
37 pub beginning_timestamp: Option<Timestamp>,
39 pub end_timestamp: Option<Timestamp>,
41 pub events_discarded: Option<EventCount>,
45 pub sequence_number: Option<SequenceNumber>,
47 pub extra_members: Vec<(Intern<String>, FieldValue)>,
49}
50
51impl PacketContext {
52 pub fn packet_size(&self) -> usize {
54 self.packet_size_bits >> 3
55 }
56
57 pub fn content_size(&self) -> usize {
59 self.content_size_bits >> 3
60 }
61}