use crate::error::types::{TaskFailure, TaskFailureKind};
use crate::task::factory::TaskResult;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TaskExit {
Succeeded,
Cancelled,
Failed(TaskFailure),
Panicked(String),
TimedOut,
}
impl TaskExit {
pub fn from_task_result(result: TaskResult) -> Self {
match result {
TaskResult::Succeeded => Self::Succeeded,
TaskResult::Cancelled => Self::Cancelled,
TaskResult::Failed(failure) => Self::Failed(failure),
}
}
pub fn is_success(&self) -> bool {
matches!(self, Self::Succeeded)
}
pub fn failure_kind(&self) -> Option<TaskFailureKind> {
match self {
Self::Succeeded => None,
Self::Cancelled => Some(TaskFailureKind::Cancelled),
Self::Failed(failure) => Some(failure.kind.clone()),
Self::Panicked(_message) => Some(TaskFailureKind::Panic),
Self::TimedOut => Some(TaskFailureKind::Timeout),
}
}
}