use super::MergeEvidenceDisplay;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MergePlanDisplay {
pub evidence: MergeEvidenceDisplay,
pub status: &'static str,
pub action: &'static str,
}
impl MergePlanDisplay {
pub(crate) fn from_evidence(evidence: MergeEvidenceDisplay) -> Self {
let status = plan_status_from_name(evidence.outcome);
Self {
evidence,
status,
action: action_for_plan_status(status),
}
}
pub fn displayed_item_count(&self) -> usize {
self.evidence.displayed_item_count()
}
pub fn total_item_count(&self) -> usize {
self.evidence.total_item_count()
}
}
fn plan_status_from_name(outcome: &str) -> &'static str {
match outcome {
"Confluent" => "ConfluentSubset",
"Conflict" => "BlockedConflict",
"OrderedDependency" => "BlockedOrderedDependency",
"Unsupported" => "BlockedUnsupported",
"Deferred" => "BlockedDeferred",
"NotConfluent" => "BlockedNotConfluent",
"EvidenceFailure" => "BlockedEvidenceFailure",
"InvalidCandidate" => "BlockedInvalidCandidate",
_ => "BlockedEvidenceFailure",
}
}
fn action_for_plan_status(status: &str) -> &'static str {
match status {
"ConfluentSubset" => "review the evidence, then run 'prikk merge' to execute",
"BlockedConflict" => "inspect evidence; conflict resolution is not implemented",
"BlockedOrderedDependency" => {
"inspect ordering evidence; execution ordering policy is not implemented"
}
"BlockedUnsupported" => "inspect unsupported operation evidence",
"BlockedDeferred" => "inspect deferred design evidence",
"BlockedNotConfluent" => "inspect replay/final-state mismatch evidence",
"BlockedEvidenceFailure" => "repair or verify repository evidence before planning",
"BlockedInvalidCandidate" => "select valid sealed candidates before planning",
_ => "unrecognized plan status; inspect evidence",
}
}