use crate::{
config::ClockType,
types::{Event, EventCount, FieldValue, SequenceNumber, StreamId, Timestamp},
};
use internment::Intern;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
pub struct Packet {
pub header: PacketHeader,
pub context: PacketContext,
pub events: Vec<Event>,
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Serialize, Deserialize)]
pub struct PacketHeader {
pub magic_number: Option<u32>,
pub trace_uuid: Option<Uuid>,
pub stream_id: StreamId,
pub stream_name: Intern<String>,
pub clock_name: Option<Intern<String>>,
pub clock_type: Option<Intern<ClockType>>,
}
impl PacketHeader {
pub const MAGIC: u32 = 0xC1FC_1FC1;
}
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
pub struct PacketContext {
pub packet_size_bits: usize,
pub content_size_bits: usize,
pub beginning_timestamp: Option<Timestamp>,
pub end_timestamp: Option<Timestamp>,
pub events_discarded: Option<EventCount>,
pub sequence_number: Option<SequenceNumber>,
pub extra_members: Vec<(Intern<String>, FieldValue)>,
}
impl PacketContext {
pub fn packet_size(&self) -> usize {
self.packet_size_bits >> 3
}
pub fn content_size(&self) -> usize {
self.content_size_bits >> 3
}
}