use crate::ValueFingerprint;
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Revision(u64);
impl Revision {
pub const ZERO: Self = Self(0);
#[must_use]
pub const fn new(value: u64) -> Self {
Self(value)
}
#[must_use]
pub const fn get(self) -> u64 {
self.0
}
}
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum ObservationKind {
Read,
Missing,
Listing,
Policy,
Epoch,
Custom(&'static str),
}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct Observation<K> {
key: K,
kind: ObservationKind,
revision: Revision,
fingerprint: Option<ValueFingerprint>,
}
impl<K> Observation<K> {
#[must_use]
pub fn new(
key: K,
kind: ObservationKind,
revision: Revision,
fingerprint: Option<ValueFingerprint>,
) -> Self {
Self {
key,
kind,
revision,
fingerprint,
}
}
#[must_use]
pub fn read(key: K, revision: Revision, fingerprint: ValueFingerprint) -> Self {
Self::new(key, ObservationKind::Read, revision, Some(fingerprint))
}
#[must_use]
pub fn key(&self) -> &K {
&self.key
}
#[must_use]
pub fn kind(&self) -> &ObservationKind {
&self.kind
}
#[must_use]
pub fn revision(&self) -> Revision {
self.revision
}
#[must_use]
pub fn fingerprint(&self) -> Option<ValueFingerprint> {
self.fingerprint
}
}