use super::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Confidence {
Authoritative,
Heuristic,
}
impl Confidence {
pub(crate) fn label(self) -> &'static str {
match self {
Confidence::Authoritative => "AUTHORITATIVE",
Confidence::Heuristic => "HEURISTIC",
}
}
pub(crate) fn json(self) -> &'static str {
match self {
Confidence::Authoritative => "authoritative",
Confidence::Heuristic => "heuristic",
}
}
}
#[derive(Debug, Clone)]
pub(crate) struct Boundary {
pub(crate) line_no: usize,
pub(crate) turn_index: usize,
pub(crate) timestamp_utc: Option<String>,
pub(crate) kind: &'static str,
pub(crate) confidence: Confidence,
pub(crate) detail: String,
}
#[derive(Debug, Default, Clone)]
pub(crate) struct EventCounts {
pub(crate) read_full: usize,
pub(crate) read_windowed: usize,
pub(crate) edit: usize,
pub(crate) edit_unanchorable: usize,
pub(crate) write: usize,
pub(crate) bash: usize,
pub(crate) external_edit: usize,
pub(crate) history_snapshot: usize,
pub(crate) integrity_error: usize,
pub(crate) stale_hint: usize,
pub(crate) stale_recovered: usize,
pub(crate) bash_read_anchor: usize,
pub(crate) bash_write_anchor: usize,
pub(crate) snapshot_rebase: usize,
}
#[derive(Debug, Clone)]
pub(crate) struct Segment {
pub(crate) index: usize,
pub(crate) line_no_start: usize,
pub(crate) line_no_end: usize,
pub(crate) turn_start: usize,
pub(crate) turn_end: usize,
pub(crate) ts_start: Option<String>,
pub(crate) ts_end: Option<String>,
pub(crate) end_buffer: SparseBuffer,
pub(crate) start_buffer: SparseBuffer,
pub(crate) pre_state_known: bool,
pub(crate) anchor_source: Option<SnapSource>,
}
#[derive(Debug, Default)]
pub(crate) struct Replay {
pub(crate) segments: Vec<Segment>,
pub(crate) boundaries: Vec<Boundary>,
pub(crate) counts: EventCounts,
pub(crate) final_buffer: SparseBuffer,
pub(crate) coverage_holes: Vec<(usize, usize, usize)>, }