use super::*;
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangesReadModel {
pub(crate) turns: Vec<ChangeTurn>,
pub(crate) diagnostics: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangeTurn {
pub(crate) user_turn: u64,
pub(crate) changes: Vec<ChangeEntry>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ChangeEntry {
pub(crate) tool: SnapshotTool,
pub(crate) relative_path: PathBuf,
pub(crate) classification: ChangeClassification,
pub(crate) rewindable: bool,
pub(crate) unavailable_reason: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum ChangeClassification {
Created,
Modified,
Deleted,
NonRewindable,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestorePlan {
pub(crate) session_id: String,
pub(crate) target_turn: u64,
pub(crate) latest_turn: Option<u64>,
pub(crate) operations: Vec<RestoreOperation>,
pub(crate) diagnostics: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestoreOperation {
pub(crate) relative_path: PathBuf,
pub(crate) kind: RestoreOperationKind,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum RestoreOperationKind {
Restore {
pre: SnapshotBlobRef,
expected_current: SnapshotBlobRef,
},
DeleteCreated {
expected_current: SnapshotBlobRef,
},
ResurrectDeleted {
pre: SnapshotBlobRef,
},
SkipConflict {
reason: String,
},
SkipUnavailable {
reason: String,
},
}
impl RestoreOperationKind {
pub(crate) fn label(&self) -> &'static str {
match self {
Self::Restore { .. } => "restore",
Self::DeleteCreated { .. } => "delete-created",
Self::ResurrectDeleted { .. } => "resurrect-deleted",
Self::SkipConflict { .. } => "skip-conflict",
Self::SkipUnavailable { .. } => "skip-unavailable",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RewindExecution {
pub(crate) results: Vec<RestoreOperationResult>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct RestoreOperationResult {
pub(crate) relative_path: PathBuf,
pub(crate) status: RestoreStatus,
pub(crate) reason: Option<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
#[serde(rename_all = "snake_case")]
pub(crate) enum RestoreStatus {
Restored,
DeletedCreated,
ResurrectedDeleted,
SkipConflict,
SkipUnavailable,
}