use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use bytes::Bytes;
#[derive(Clone, Default)]
pub(crate) struct ClaimCursor {
inner: Arc<Mutex<HashMap<String, Bytes>>>,
}
impl ClaimCursor {
pub(crate) fn new() -> Self {
Self::default()
}
pub(crate) fn get(&self, queue: &str) -> Option<Bytes> {
self.inner.lock().unwrap().get(queue).cloned()
}
pub(crate) fn set(&self, queue: &str, cursor: Bytes) {
self.inner.lock().unwrap().insert(queue.to_string(), cursor);
}
pub(crate) fn clear(&self, queue: &str) {
self.inner.lock().unwrap().remove(queue);
}
pub(crate) fn invalidate_if_at_or_before(&self, queue: &str, new_key: &str) {
let mut map = self.inner.lock().unwrap();
if let Some(cursor) = map.get(queue) {
if new_key.as_bytes() <= cursor.as_ref() {
map.remove(queue);
}
}
}
}