use serde::{Deserialize, Serialize};
use crate::assertion::AssertionState;
use crate::feature::FeatureId;
use crate::handoff::Handoff;
use crate::mission::{MissionId, MissionState};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "event", rename_all = "snake_case")]
pub enum MissionEvent {
MissionAccepted {
mission_id: MissionId,
},
MissionPaused {
mission_id: MissionId,
},
MissionResumed {
mission_id: MissionId,
},
MissionRunStarted {
mission_id: MissionId,
},
WorkerSelectedFeature {
mission_id: MissionId,
feature_id: FeatureId,
agent_id: String,
},
WorkerCompleted {
mission_id: MissionId,
feature_id: FeatureId,
success_state: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
commit_or_snapshot: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
handoff: Option<Box<Handoff>>,
},
WorkerFailed {
mission_id: MissionId,
feature_id: FeatureId,
reason: String,
},
MilestoneValidationTriggered {
mission_id: MissionId,
milestone: String,
},
OrchestratorOverride {
mission_id: MissionId,
reason: String,
},
MissionStateChanged {
mission_id: MissionId,
from: MissionState,
to: MissionState,
},
AssertionUpdated {
mission_id: MissionId,
assertion_id: String,
old_state: AssertionState,
new_state: AssertionState,
},
MissionResumeRequired {
mission_id: MissionId,
objective_preview: String,
last_state: MissionState,
},
}