#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
Hash,
serde::Serialize,
serde::Deserialize,
schemars::JsonSchema,
)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum TaskErrorCode {
Unspecified,
Timeout,
InvalidInput,
ComponentFailed,
Cancelled,
Unreachable,
ComponentNotFound,
ResourceUnavailable,
ExpressionFailure,
OrchestratorError,
WorkerError,
}
impl TaskErrorCode {
pub fn as_str_name(&self) -> &'static str {
match self {
Self::Unspecified => "TASK_ERROR_CODE_UNSPECIFIED",
Self::Timeout => "TASK_ERROR_CODE_TIMEOUT",
Self::InvalidInput => "TASK_ERROR_CODE_INVALID_INPUT",
Self::ComponentFailed => "TASK_ERROR_CODE_COMPONENT_FAILED",
Self::Cancelled => "TASK_ERROR_CODE_CANCELLED",
Self::Unreachable => "TASK_ERROR_CODE_UNREACHABLE",
Self::ComponentNotFound => "TASK_ERROR_CODE_COMPONENT_NOT_FOUND",
Self::ResourceUnavailable => "TASK_ERROR_CODE_RESOURCE_UNAVAILABLE",
Self::ExpressionFailure => "TASK_ERROR_CODE_EXPRESSION_FAILURE",
Self::OrchestratorError => "TASK_ERROR_CODE_ORCHESTRATOR_ERROR",
Self::WorkerError => "TASK_ERROR_CODE_WORKER_ERROR",
}
}
pub fn proto_number(&self) -> i32 {
match self {
Self::Unspecified => 0,
Self::Timeout => 1,
Self::InvalidInput => 2,
Self::ComponentFailed => 3,
Self::Cancelled => 4,
Self::Unreachable => 5,
Self::ComponentNotFound => 6,
Self::ResourceUnavailable => 7,
Self::ExpressionFailure => 8,
Self::OrchestratorError => 9,
Self::WorkerError => 10,
}
}
}
impl From<TaskErrorCode> for i32 {
fn from(code: TaskErrorCode) -> i32 {
code.proto_number()
}
}
impl TryFrom<i32> for TaskErrorCode {
type Error = i32;
fn try_from(value: i32) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Unspecified),
1 => Ok(Self::Timeout),
2 => Ok(Self::InvalidInput),
3 => Ok(Self::ComponentFailed),
4 => Ok(Self::Cancelled),
5 => Ok(Self::Unreachable),
6 => Ok(Self::ComponentNotFound),
7 => Ok(Self::ResourceUnavailable),
8 => Ok(Self::ExpressionFailure),
9 => Ok(Self::OrchestratorError),
10 => Ok(Self::WorkerError),
other => Err(other),
}
}
}
impl std::fmt::Display for TaskErrorCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let proto_name = self.as_str_name();
let short = &proto_name["TASK_ERROR_CODE_".len()..];
f.write_str(short)
}
}