use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[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, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExecutionStatus {
Pending,
InProgress,
Succeeded,
Failed,
Cancelled,
}
impl ExecutionStatus {
#[must_use]
pub const fn is_terminal(&self) -> bool {
matches!(
self,
ExecutionStatus::Succeeded | ExecutionStatus::Failed | ExecutionStatus::Cancelled
)
}
}