use std::time::SystemTime;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::{
executors::ExecutorId,
jobs::{JobId, JobTypeId, RetryPolicy, TimeoutPolicy},
};
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[repr(transparent)]
#[serde(transparent)]
pub struct ExecutionId(pub Uuid);
impl std::fmt::Display for ExecutionId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl From<Uuid> for ExecutionId {
fn from(value: Uuid) -> Self {
Self(value)
}
}
impl From<ExecutionId> for Uuid {
fn from(value: ExecutionId) -> Self {
value.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExecutionDetails {
pub id: ExecutionId,
pub executor_id: Option<ExecutorId>,
pub status: ExecutionStatus,
pub created_at: SystemTime,
pub started_at: Option<SystemTime>,
pub succeeded_at: Option<SystemTime>,
pub failed_at: Option<SystemTime>,
pub cancelled_at: Option<SystemTime>,
pub output_json: Option<String>,
pub failure_reason: Option<String>,
pub target_execution_time: SystemTime,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExecutionStatus {
Pending,
InProgress,
Succeeded,
Failed,
Cancelled,
}
#[derive(Debug, Clone)]
pub struct ReadyExecution {
pub execution_id: ExecutionId,
pub job_id: JobId,
pub job_type_id: JobTypeId,
pub input_payload_json: String,
pub attempt_number: u64,
pub retry_policy: RetryPolicy,
pub target_execution_time: SystemTime,
}
pub struct StartedExecution {
pub execution_id: ExecutionId,
pub executor_id: ExecutorId,
pub started_at: SystemTime,
}
pub struct SucceededExecution {
pub execution_id: ExecutionId,
pub succeeded_at: SystemTime,
pub output_json: String,
}
pub struct FailedExecution {
pub execution_id: ExecutionId,
pub job_id: JobId,
pub failed_at: SystemTime,
pub failure_reason: String,
}
pub struct RetriedExecution {
pub failed_execution: FailedExecution,
pub retry_execution_time: SystemTime,
}
pub struct InProgressExecution {
pub execution_id: ExecutionId,
pub job_id: JobId,
pub executor_id: ExecutorId,
pub target_execution_time: SystemTime,
pub started_at: SystemTime,
pub timeout_policy: TimeoutPolicy,
pub retry_policy: RetryPolicy,
pub attempt_number: u64,
}