robotrt-data-model 0.1.0-beta.1

RobotRT modular robotics runtime and middleware components.
Documentation
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),
}