plan_issue/tracking/
checkpoint.rs1use serde::{Deserialize, Serialize};
8
9use crate::lifecycle_record::PayloadRole;
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct CheckpointSlice {
14 pub role: PayloadRole,
15 pub body: String,
16 #[serde(default)]
17 pub planned_comment_url: Option<String>,
18}
19
20#[derive(Debug, Clone, Default, Serialize, Deserialize)]
22pub struct CheckpointPlan {
23 pub roles_planned: Vec<PayloadRole>,
24 pub roles_skipped: Vec<SkippedRole>,
25 pub rendered: Vec<CheckpointSlice>,
26 pub repair_dashboard: bool,
27 pub blocked: Vec<BlockedCheckpoint>,
28}
29
30impl CheckpointPlan {
31 pub fn is_blocked(&self) -> bool {
32 !self.blocked.is_empty()
33 }
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct SkippedRole {
39 pub role: PayloadRole,
40 pub reason: String,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct BlockedCheckpoint {
49 pub code: String,
50 pub role: Option<PayloadRole>,
51 pub message: String,
52 pub suggested_unblock: String,
53}