Expand description
Runtime-agnostic buffer traits and configuration for async producer-consumer dispatch
This module defines the buffer abstraction without runtime-specific implementations. Actual buffer implementations are provided by adapter crates:
aimdb-tokio-adapter- Tokio-based buffers (std environments)aimdb-embassy-adapter- Embassy-based buffers (embedded no_std)
§Buffer Types
Three buffering strategies are supported:
- SPMC Ring: Bounded backlog with per-consumer lag tolerance
- SingleLatest: Only newest value kept (no backlog)
- Mailbox: Single-slot with overwrite semantics
§Design Philosophy
Each record type can choose the appropriate buffer based on its data flow:
- High-frequency telemetry → SPMC ring
- Configuration state → SingleLatest
- Commands/triggers → Mailbox
§Architecture
┌─────────────────────────────────────────────────┐
│ aimdb-core (trait layer) │
│ BufferBackend<T> + BufferReader<T> + BufferCfg │
└────────────────┬────────────────────────────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌─────────────┐ ┌──────────────────┐
│ tokio impl │ │ embassy impl │
│ (std) │ │ (no_std) │
└─────────────┘ └──────────────────┘§Example
Illustrative (not compiled: .buffer() comes from your runtime adapter’s
registrar extension trait, which aimdb-core cannot depend on):
ⓘ
use aimdb_core::buffer::BufferCfg;
// High-frequency sensor data
reg.buffer(BufferCfg::SpmcRing { capacity: 2048 })
.source(|ctx, producer| async move { /* … */ })
.tap(|ctx, consumer| async move { /* … */ });
// Configuration updates
reg.buffer(BufferCfg::SingleLatest)
.source(|ctx, producer| async move { /* … */ })
.tap(|ctx, consumer| async move { /* … */ });Re-exports§
pub use crate::DbError as BufferError;
Structs§
- Json
Reader - Owned, ergonomic handle over an erased
JsonBufferReader. - Reader
- Owned, ergonomic handle over an erased
BufferReader.
Enums§
- Buffer
Cfg - Buffer configuration for a record type
- TryProduce
Error - Non-blocking push error — carries the rejected value back to the caller.
Traits§
- Buffer
- Static buffer trait for concrete implementations
- Buffer
Reader - Reader trait for consuming values from a buffer
- DynBuffer
- Dynamic buffer trait for trait objects (object-safe)
- Json
Buffer Reader - Reader trait for consuming JSON-serialized values from a buffer.
Type Aliases§
- Buffer
Result - Result type for buffer operations