pub enum BufferCfg {
SpmcRing {
capacity: usize,
},
SingleLatest,
Mailbox,
}Expand description
Buffer configuration for a record type
Selects buffering strategy: SPMC Ring (backlog), SingleLatest (state sync), or Mailbox (commands).
§Quick Selection Guide
- High-frequency data (>10 Hz):
SpmcRingwith tuned capacity - State/config updates:
SingleLatest(only latest matters) - Commands/one-shot events:
Mailbox
§Examples
use aimdb_core::buffer::BufferCfg;
let telemetry = BufferCfg::SpmcRing { capacity: 2048 }; // High-freq data
let config = BufferCfg::SingleLatest; // State sync
let commands = BufferCfg::Mailbox; // CommandsVariants§
SpmcRing
SPMC (Single Producer, Multiple Consumer) ring buffer
Best for high-frequency data streams with bounded memory. Fast producers can outrun slow consumers (lag detection). Oldest messages dropped on overflow.
Sizing: capacity = data_rate_hz × lag_seconds (use power-of-2)
SingleLatest
Single latest value buffer (no backlog)
Only most recent value is kept. Consumers always get latest state. Intermediate updates are collapsed. Use when history doesn’t matter.
Mailbox
Single-slot mailbox with overwrite
New value overwrites old if not consumed. At-least-once delivery. Use for commands where latest command wins.
Implementations§
Source§impl BufferCfg
impl BufferCfg
Sourcepub fn validate(&self) -> Result<(), &'static str>
pub fn validate(&self) -> Result<(), &'static str>
Validates the buffer configuration
Returns Err if SPMC Ring capacity is 0.
Sourcepub fn estimated_memory_bytes(
&self,
item_size: usize,
consumer_count: usize,
) -> usize
pub fn estimated_memory_bytes( &self, item_size: usize, consumer_count: usize, ) -> usize
Returns estimated memory overhead for this buffer type
Approximation; varies by implementation and platform.