Skip to main content

memlink_protocol/
sproto.rs

1//! Stream protocol constants.
2//!
3//! Defines constants for stream handles including sizes, offsets,
4//! timeouts, and chunk size limits for streaming operations.
5
6pub const STREAM_ID_SIZE: usize = 32;
7
8pub const STREAM_CHECKSUM_SIZE: usize = 16;
9
10pub const STREAM_TOTAL_SIZE_OFFSET: usize = 32;
11
12pub const STREAM_CHECKSUM_OFFSET: usize = 40;
13
14pub const STREAM_EXPIRES_OFFSET: usize = 56;
15
16pub const STREAM_HANDLE_SIZE: usize = 80;
17
18pub const STREAM_HEADER_SIZE: usize = STREAM_HANDLE_SIZE;
19
20pub const DEFAULT_STREAM_TIMEOUT_NS: u64 = 30_000_000_000;
21
22pub const MAX_STREAM_TIMEOUT_NS: u64 = 3_600_000_000_000;
23
24pub const MIN_CHUNK_SIZE: usize = 4096;
25
26pub const DEFAULT_CHUNK_SIZE: usize = 65536;
27
28pub const MAX_CHUNK_SIZE: usize = 1048576;
29
30#[repr(u8)]
31#[derive(Debug, Clone, Copy, PartialEq, Eq)]
32pub enum StreamState {
33    Initializing = 0,
34    Ready = 1,
35    Transferring = 2,
36    Complete = 3,
37    Error = 4,
38}
39
40impl StreamState {
41    pub fn from_u8(value: u8) -> Option<Self> {
42        match value {
43            0 => Some(StreamState::Initializing),
44            1 => Some(StreamState::Ready),
45            2 => Some(StreamState::Transferring),
46            3 => Some(StreamState::Complete),
47            4 => Some(StreamState::Error),
48            _ => None,
49        }
50    }
51
52    pub fn as_u8(self) -> u8 {
53        self as u8
54    }
55}
56
57#[repr(u8)]
58#[derive(Debug, Clone, Copy, PartialEq, Eq)]
59pub enum StreamMode {
60    Push = 0,
61    Pull = 1,
62    Bidirectional = 2,
63}
64
65impl StreamMode {
66    pub fn from_u8(value: u8) -> Option<Self> {
67        match value {
68            0 => Some(StreamMode::Push),
69            1 => Some(StreamMode::Pull),
70            2 => Some(StreamMode::Bidirectional),
71            _ => None,
72        }
73    }
74
75    pub fn as_u8(self) -> u8 {
76        self as u8
77    }
78}