use std::sync::atomic::{AtomicU64, Ordering};
use async_trait::async_trait;
use crate::{MessageStore, StoreError};
pub struct NoopStore {
sender_seq: AtomicU64,
target_seq: AtomicU64,
}
impl Default for NoopStore {
fn default() -> Self {
Self {
sender_seq: AtomicU64::new(1),
target_seq: AtomicU64::new(1),
}
}
}
impl NoopStore {
pub fn new() -> Self {
Self::default()
}
}
#[async_trait]
impl MessageStore for NoopStore {
async fn next_sender_seq(&self) -> Result<u64, StoreError> {
Ok(self.sender_seq.load(Ordering::SeqCst))
}
async fn next_target_seq(&self) -> Result<u64, StoreError> {
Ok(self.target_seq.load(Ordering::SeqCst))
}
async fn set_next_sender_seq(&self, seq: u64) -> Result<(), StoreError> {
self.sender_seq.store(seq, Ordering::SeqCst);
Ok(())
}
async fn set_next_target_seq(&self, seq: u64) -> Result<(), StoreError> {
self.target_seq.store(seq, Ordering::SeqCst);
Ok(())
}
async fn save(&self, _seq: u64, _message: &[u8]) -> Result<(), StoreError> {
Ok(())
}
async fn get(&self, _begin: u64, _end: u64) -> Result<Vec<(u64, Vec<u8>)>, StoreError> {
Ok(Vec::new())
}
async fn reset(&self) -> Result<(), StoreError> {
self.sender_seq.store(1, Ordering::SeqCst);
self.target_seq.store(1, Ordering::SeqCst);
Ok(())
}
}