use crate::contract::host_control::CommitDurability;
use crate::contract::ids::{ArtifactId, AttemptId, BoundaryPlanHash};
use crate::contract::plan::BoundaryPlan;
use crate::contract::recovery::{QuarantineRecord, RecoveryClassification};
use crate::contract::report::BoundaryReport;
use batpak::EventPayload;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, EventPayload)]
#[batpak(category = 0xE, type_id = 0x001, version = 1)]
pub struct BoundaryStartedEvent {
pub plan: BoundaryPlan,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, EventPayload)]
#[batpak(category = 0xE, type_id = 0x002, version = 1)]
pub struct BoundaryReportEvent {
pub report: BoundaryReport,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, EventPayload)]
#[batpak(category = 0xE, type_id = 0x003, version = 1)]
pub struct BoundaryRecoveryEvent {
pub plan_id: BoundaryPlanHash,
pub classification: RecoveryClassification,
pub quarantined: Vec<QuarantineRecord>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum DispositionAction {
Promote,
Retain,
Discard,
Refuse,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum DispositionPhase {
Decided {
action: DispositionAction,
},
Applied {
durability: CommitDurability,
},
Failed {
reason: String,
},
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, EventPayload)]
#[batpak(category = 0xE, type_id = 0x004, version = 1)]
pub struct BoundaryDispositionEvent {
pub plan_id: BoundaryPlanHash,
pub attempt: AttemptId,
pub artifact: ArtifactId,
pub phase: DispositionPhase,
}