use serde::{Deserialize, Serialize};
use crate::lifecycle_record::PayloadRole;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckpointSlice {
pub role: PayloadRole,
pub body: String,
#[serde(default)]
pub planned_comment_url: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CheckpointPlan {
pub roles_planned: Vec<PayloadRole>,
pub roles_skipped: Vec<SkippedRole>,
pub rendered: Vec<CheckpointSlice>,
pub repair_dashboard: bool,
pub blocked: Vec<BlockedCheckpoint>,
}
impl CheckpointPlan {
pub fn is_blocked(&self) -> bool {
!self.blocked.is_empty()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkippedRole {
pub role: PayloadRole,
pub reason: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlockedCheckpoint {
pub code: String,
pub role: Option<PayloadRole>,
pub message: String,
pub suggested_unblock: String,
}