use std::path::PathBuf;
pub type Diff = i32;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum TxnOp {
Put {
rel: String,
tuple: String,
diff: Diff,
},
File {
rel: String,
path: PathBuf,
diff: Diff,
},
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum TxnAction {
#[default]
None,
Commit,
Quit,
}
#[derive(Clone, Debug, Default)]
pub struct TxnState {
pub epoch: u32,
pub action: TxnAction,
pub pending: Vec<TxnOp>,
}
impl TxnState {
pub fn clear_pending(&mut self) {
self.pending.clear();
}
pub fn enqueue(&mut self, op: TxnOp) {
self.pending.push(op);
}
pub fn as_commit_snapshot(&self, next_epoch: u32) -> TxnState {
TxnState {
epoch: next_epoch,
action: TxnAction::Commit,
pending: self.pending.clone(),
}
}
pub fn as_quit_snapshot(next_epoch: u32) -> TxnState {
TxnState {
epoch: next_epoch,
action: TxnAction::Quit,
pending: Vec::new(),
}
}
}