use serde::{Deserialize, Serialize};
use super::agent::AgentEvent;
use super::development::DevelopmentEvent;
use super::review::ReviewEvent;
use super::types::{
AwaitingDevFixEvent, CheckpointTrigger, CommitEvent, LifecycleEvent, PlanningEvent,
PromptInputEvent, RebaseEvent,
};
#[derive(Clone, Serialize, Deserialize, Debug)]
pub enum PipelineEvent {
Lifecycle(LifecycleEvent),
Planning(PlanningEvent),
Development(DevelopmentEvent),
Review(ReviewEvent),
PromptInput(PromptInputEvent),
Agent(AgentEvent),
Rebase(RebaseEvent),
Commit(CommitEvent),
AwaitingDevFix(AwaitingDevFixEvent),
ContextCleaned,
CheckpointSaved {
trigger: CheckpointTrigger,
},
FinalizingStarted,
PromptPermissionsRestored,
LoopRecoveryTriggered {
detected_loop: String,
loop_count: u32,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn lifecycle_event_is_frozen() {
fn exhaustive_match(e: &LifecycleEvent) -> &'static str {
match e {
LifecycleEvent::Started => "started",
LifecycleEvent::Resumed { .. } => "resumed",
LifecycleEvent::Completed => "completed",
LifecycleEvent::GitignoreEntriesEnsured { .. } => "gitignore_ensured",
}
}
let _ = exhaustive_match(&LifecycleEvent::Started);
}
#[test]
fn pipeline_event_is_frozen() {
fn exhaustive_match(e: &PipelineEvent) -> &'static str {
match e {
PipelineEvent::Lifecycle(_) => "lifecycle",
PipelineEvent::Planning(_) => "planning",
PipelineEvent::Development(_) => "development",
PipelineEvent::Review(_) => "review",
PipelineEvent::PromptInput(_) => "prompt_input",
PipelineEvent::Agent(_) => "agent",
PipelineEvent::Rebase(_) => "rebase",
PipelineEvent::Commit(_) => "commit",
PipelineEvent::AwaitingDevFix(_) => "awaiting_dev_fix",
PipelineEvent::ContextCleaned => "context_cleaned",
PipelineEvent::CheckpointSaved { .. } => "checkpoint_saved",
PipelineEvent::FinalizingStarted => "finalizing_started",
PipelineEvent::PromptPermissionsRestored => "prompt_permissions_restored",
PipelineEvent::LoopRecoveryTriggered { .. } => "loop_recovery_triggered",
}
}
let _ = exhaustive_match(&PipelineEvent::ContextCleaned);
}
}