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}