#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct EpochTag(pub [u8; 32]);
impl EpochTag {
pub const ZERO: Self = Self([0u8; 32]);
#[must_use]
pub fn from_bytes(bytes: [u8; 32]) -> Self {
Self(bytes)
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum LsnKind {
SqliteWalFrame {
salt1: u32,
salt2: u32,
frame_seq: u32,
commit_seq: u32,
},
EseLsn(u64),
NtfsLfs { record: u64 },
JournaldSeq(u64),
GitCommitSha(String),
ApfsTransactionId(u64),
BtrfsGeneration(u64),
VssShadowSetId([u8; 16]),
UsnRecord { usn: u64 },
Custom { name: &'static str, value: Vec<u8> },
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PruneTrigger {
GcRun,
LogRotation,
SpacePressure,
Manual,
AutoCheckpoint,
Other(String),
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum MaterializationSafety {
ReadOnlySafe,
ReadOnlyRequiresCareful,
Destructive,
EphemeralOnce,
AutoPruned { trigger: PruneTrigger },
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CohortTopology {
DiscreteSet,
LinearJournal { lsn_type: LsnKind },
SubJournalCommits,
Dag,
}
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TopologyKind {
DiscreteSet,
LinearJournal,
SubJournalCommits,
Dag,
}
impl CohortTopology {
#[must_use]
pub fn kind(&self) -> TopologyKind {
match self {
CohortTopology::DiscreteSet => TopologyKind::DiscreteSet,
CohortTopology::LinearJournal { .. } => TopologyKind::LinearJournal,
CohortTopology::SubJournalCommits => TopologyKind::SubJournalCommits,
CohortTopology::Dag => TopologyKind::Dag,
}
}
}