Module buffer

Module buffer 

Source
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

use aimdb_core::buffer::BufferCfg;

// High-frequency sensor data
reg.buffer(BufferCfg::SpmcRing { capacity: 2048 })
   .source(|em, data| async { ... })
   .tap(|em, data| async { ... });

// Configuration updates
reg.buffer(BufferCfg::SingleLatest)
   .source(|em, cfg| async { ... })
   .tap(|em, cfg| async { ... });

Re-exports§

pub use crate::DbError as BufferError;

Enums§

BufferCfg
Buffer configuration for a record type

Traits§

Buffer
Static buffer trait for concrete implementations
BufferReader
Reader trait for consuming values from a buffer
DynBuffer
Dynamic buffer trait for trait objects (object-safe)
JsonBufferReader
Reader trait for consuming JSON-serialized values from a buffer (std only)

Type Aliases§

BufferResult
Result type for buffer operations