1use core_types::BufferId;
2use memmap2::Mmap;
3
4mod config;
5mod header;
6mod rate_limiter;
7mod reader;
8mod segment_io;
9mod writer;
10
11pub use config::{ShmRateLimitConfig, ShmTransportConfig};
12use rate_limiter::TokenBucket;
13
14#[derive(Clone, Copy, Debug, Eq, PartialEq)]
15pub struct SharedMemoryBufferRef {
16 pub buffer_id: BufferId,
17 pub offset: usize,
18 pub len: usize,
19}
20
21#[derive(Debug)]
22pub struct SharedMemoryLease {
23 mmap: Mmap,
24 offset: usize,
25 len: usize,
26}
27
28impl SharedMemoryLease {
29 pub fn as_slice(&self) -> &[u8] {
30 &self.mmap[self.offset..self.offset + self.len]
31 }
32
33 pub fn len(&self) -> usize {
34 self.len
35 }
36
37 pub fn is_empty(&self) -> bool {
38 self.len == 0
39 }
40}
41
42pub struct SharedMemoryWriter {
43 cfg: ShmTransportConfig,
44 next_buffer_id: u64,
45 rate_limiter: Option<TokenBucket>,
46}
47
48pub struct SharedMemoryReader {
49 cfg: ShmTransportConfig,
50}