Skip to main content

data_model/
envelope.rs

1use core_types::{BufferId, SessionId, StreamId, Timestamp, TransportDomain};
2
3use crate::schema::{SchemaId, SchemaVersion};
4
5#[derive(Clone, Debug, Eq, PartialEq)]
6pub struct PacketHeader {
7    pub version: u16,
8    pub domain: TransportDomain,
9    pub session_id: Option<SessionId>,
10    pub stream_id: Option<StreamId>,
11    pub sequence: u64,
12    pub ack: Option<u64>,
13    pub timestamp: Timestamp,
14    pub schema_id: SchemaId,
15    pub schema_version: SchemaVersion,
16}
17
18#[derive(Clone, Debug, Eq, PartialEq)]
19pub struct ControlEnvelope {
20    pub header: PacketHeader,
21    pub label: String,
22    pub payload: Vec<u8>,
23}
24
25#[derive(Clone, Debug, Eq, PartialEq)]
26pub struct ExternalBufferRef {
27    pub buffer_id: BufferId,
28    pub offset: usize,
29    pub len: usize,
30}
31
32#[derive(Clone, Debug, Eq, PartialEq)]
33pub enum DataPayload {
34    Inline(Vec<u8>),
35    External(ExternalBufferRef),
36}
37
38#[derive(Clone, Debug, Eq, PartialEq)]
39pub struct DataEnvelope {
40    pub header: PacketHeader,
41    pub payload: DataPayload,
42}
43
44#[derive(Clone, Debug, Eq, PartialEq)]
45pub enum Packet {
46    Control(ControlEnvelope),
47    Data(DataEnvelope),
48}