Skip to main content

truefix_store/
noop.rs

1//! A store that persists nothing.
2
3use std::sync::atomic::{AtomicU64, Ordering};
4
5use async_trait::async_trait;
6
7use crate::{MessageStore, StoreError};
8
9/// A no-op store: sequence numbers are tracked in memory for the session's lifetime (matching
10/// QFJ's own `NoopStore`, NEW-118/audit 006 -- previously always reported `1` regardless of
11/// `set_next_*_seq` calls) but nothing else is persisted; `save`/`get` are no-ops.
12pub struct NoopStore {
13    sender_seq: AtomicU64,
14    target_seq: AtomicU64,
15}
16
17impl Default for NoopStore {
18    fn default() -> Self {
19        Self {
20            sender_seq: AtomicU64::new(1),
21            target_seq: AtomicU64::new(1),
22        }
23    }
24}
25
26impl NoopStore {
27    /// Create a new in-memory-only sequence tracker, starting both sequence numbers at 1.
28    pub fn new() -> Self {
29        Self::default()
30    }
31}
32
33#[async_trait]
34impl MessageStore for NoopStore {
35    async fn next_sender_seq(&self) -> Result<u64, StoreError> {
36        Ok(self.sender_seq.load(Ordering::SeqCst))
37    }
38    async fn next_target_seq(&self) -> Result<u64, StoreError> {
39        Ok(self.target_seq.load(Ordering::SeqCst))
40    }
41    async fn set_next_sender_seq(&self, seq: u64) -> Result<(), StoreError> {
42        self.sender_seq.store(seq, Ordering::SeqCst);
43        Ok(())
44    }
45    async fn set_next_target_seq(&self, seq: u64) -> Result<(), StoreError> {
46        self.target_seq.store(seq, Ordering::SeqCst);
47        Ok(())
48    }
49    async fn save(&self, _seq: u64, _message: &[u8]) -> Result<(), StoreError> {
50        Ok(())
51    }
52    async fn get(&self, _begin: u64, _end: u64) -> Result<Vec<(u64, Vec<u8>)>, StoreError> {
53        Ok(Vec::new())
54    }
55    async fn reset(&self) -> Result<(), StoreError> {
56        self.sender_seq.store(1, Ordering::SeqCst);
57        self.target_seq.store(1, Ordering::SeqCst);
58        Ok(())
59    }
60}