use crate::database::universal_types::{UniversalTimestamp, UniversalUuid};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RecoveryEvent {
pub id: UniversalUuid,
pub workflow_execution_id: UniversalUuid,
pub task_execution_id: Option<UniversalUuid>,
pub recovery_type: String,
pub recovered_at: UniversalTimestamp,
pub details: Option<String>,
pub created_at: UniversalTimestamp,
pub updated_at: UniversalTimestamp,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NewRecoveryEvent {
pub workflow_execution_id: UniversalUuid,
pub task_execution_id: Option<UniversalUuid>,
pub recovery_type: String,
pub details: Option<String>,
}
#[derive(Debug, Clone)]
pub enum RecoveryType {
TaskReset,
TaskAbandoned,
WorkflowFailed,
WorkflowUnavailable,
}
impl RecoveryType {
pub fn as_str(&self) -> &'static str {
match self {
RecoveryType::TaskReset => "task_reset",
RecoveryType::TaskAbandoned => "task_abandoned",
RecoveryType::WorkflowFailed => "workflow_failed",
RecoveryType::WorkflowUnavailable => "workflow_unavailable",
}
}
}
impl From<RecoveryType> for String {
fn from(recovery_type: RecoveryType) -> Self {
recovery_type.as_str().to_string()
}
}