mod reserved;
#[cfg(any(feature = "magic", feature = "debug"))]
pub(crate) use keyvalue::ITEM_MAGIC_SIZE;
use crate::SegcacheError;
use keyvalue::{RawItem, Value};
pub(crate) use reserved::ReservedItem;
pub struct Item {
cas: u32,
raw: RawItem,
}
impl Item {
pub(crate) fn new(raw: RawItem, cas: u32) -> Self {
Item { cas, raw }
}
pub(crate) fn check_magic(&self) {
self.raw.check_magic()
}
pub fn key(&self) -> &[u8] {
self.raw.key()
}
pub fn value(&self) -> Value<'_> {
self.raw.value()
}
pub fn cas(&self) -> u32 {
self.cas
}
pub fn optional(&self) -> Option<&[u8]> {
self.raw.optional()
}
pub fn wrapping_add(&mut self, rhs: u64) -> Result<(), SegcacheError> {
self.raw
.wrapping_add(rhs)
.map_err(|_| SegcacheError::NotNumeric)
}
pub fn saturating_sub(&mut self, rhs: u64) -> Result<(), SegcacheError> {
self.raw
.saturating_sub(rhs)
.map_err(|_| SegcacheError::NotNumeric)
}
}
impl std::fmt::Debug for Item {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
f.debug_struct("Item")
.field("cas", &self.cas())
.field("raw", &self.raw)
.finish()
}
}