lxmf-embedded-mini 0.7.0

No-alloc mini LXMF runtime for embedded targets.
Documentation
use crate::MiniResult;

pub trait MiniStore {
    fn load_replay_floor(&self, identity: &[u8; 16]) -> MiniResult<u64>;
    fn save_replay_floor(&mut self, identity: &[u8; 16], floor: u64) -> MiniResult<()>;
}

#[derive(Debug, Clone, Copy, Default)]
pub struct NullStore;

impl MiniStore for NullStore {
    fn load_replay_floor(&self, _identity: &[u8; 16]) -> MiniResult<u64> {
        Ok(0)
    }

    fn save_replay_floor(&mut self, _identity: &[u8; 16], _floor: u64) -> MiniResult<()> {
        Ok(())
    }
}

#[derive(Debug, Clone, Copy)]
pub struct RamReplayStore {
    identity: [u8; 16],
    replay_floor: u64,
    initialized: bool,
}

impl RamReplayStore {
    pub const fn new() -> Self {
        Self { identity: [0; 16], replay_floor: 0, initialized: false }
    }
}

impl Default for RamReplayStore {
    fn default() -> Self {
        Self::new()
    }
}

impl MiniStore for RamReplayStore {
    fn load_replay_floor(&self, identity: &[u8; 16]) -> MiniResult<u64> {
        if self.initialized && &self.identity == identity {
            Ok(self.replay_floor)
        } else {
            Ok(0)
        }
    }

    fn save_replay_floor(&mut self, identity: &[u8; 16], floor: u64) -> MiniResult<()> {
        self.identity = *identity;
        self.replay_floor = floor;
        self.initialized = true;
        Ok(())
    }
}