use core_types::{BufferId, SessionId, StreamId, Timestamp, TransportDomain};
use crate::schema::{SchemaId, SchemaVersion};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PacketHeader {
pub version: u16,
pub domain: TransportDomain,
pub session_id: Option<SessionId>,
pub stream_id: Option<StreamId>,
pub sequence: u64,
pub ack: Option<u64>,
pub timestamp: Timestamp,
pub schema_id: SchemaId,
pub schema_version: SchemaVersion,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ControlEnvelope {
pub header: PacketHeader,
pub label: String,
pub payload: Vec<u8>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ExternalBufferRef {
pub buffer_id: BufferId,
pub offset: usize,
pub len: usize,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum DataPayload {
Inline(Vec<u8>),
External(ExternalBufferRef),
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct DataEnvelope {
pub header: PacketHeader,
pub payload: DataPayload,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Packet {
Control(ControlEnvelope),
Data(DataEnvelope),
}