use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackAction {
pub id: String,
pub step_id: String,
pub action_type: RollbackType,
pub description: String,
pub verification: Option<RollbackVerification>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RollbackType {
Command { command: String, args: Vec<String> },
McpTool { sister: String, tool: String, params: serde_json::Value },
HttpRequest { method: String, url: String },
Compensate { description: String, action: serde_json::Value },
NotPossible { reason: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackVerification {
pub check_type: VerificationType,
pub expected_state: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum VerificationType {
Command { command: String },
HttpCheck { url: String, expected_status: u16 },
Expression { expression: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RollbackScope {
Full,
FromStep { step_id: String },
Selective { step_ids: Vec<String> },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackReceipt {
pub execution_id: String,
pub scope: RollbackScope,
pub rolled_back_steps: Vec<RollbackStepResult>,
pub started_at: DateTime<Utc>,
pub completed_at: DateTime<Utc>,
pub overall_success: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RollbackStepResult {
pub step_id: String,
pub success: bool,
pub error: Option<String>,
pub verification_passed: Option<bool>,
}