use crate::engine::{group_key, ns};
use crate::{Result, Store, to_ms};
use std::time::SystemTime;
pub struct Items<'a> {
store: &'a Store,
}
impl<'a> Items<'a> {
pub(crate) fn new(store: &'a Store) -> Self {
Self { store }
}
pub fn matches(&self, source: &[u8], item: &[u8], revision: &[u8]) -> Result<bool> {
Ok(self
.store
.get(ns::ITEM, &group_key(source, item)?)?
.is_some_and(|(_, value)| value == revision))
}
pub fn commit(&self, source: &[u8], item: &[u8], revision: &[u8]) -> Result<()> {
self.store
.put(
ns::ITEM,
&group_key(source, item)?,
revision,
to_ms(SystemTime::now()),
)
.map(drop)
}
pub fn forget(&self, source: &[u8], item: &[u8]) -> Result<bool> {
self.store.delete(ns::ITEM, &group_key(source, item)?)
}
}