use jiff::Timestamp;
use jiff::civil::DateTime;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TaskStatus {
#[serde(rename = "pending")]
Pending,
#[serde(rename = "in_progress")]
InProgress,
#[serde(rename = "completed")]
Completed,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "canceled")]
Canceled,
}
impl TaskStatus {
pub fn is_terminal(self) -> bool {
matches!(self, Self::Completed | Self::Failed | Self::Canceled)
}
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct TaskInfo {
pub task_id: String,
pub status: TaskStatus,
#[serde(default)]
pub created_at: Option<DateTime>,
#[serde(default)]
pub executed_at: Option<DateTime>,
#[serde(default)]
pub completed_at: Option<Timestamp>,
}