use crate::error::types::{TaskFailure, TaskFailureKind};
use crate::id::types::ChildId;
use crate::policy::task_role_defaults::TaskRole;
use crate::role::lifecycle::RoleLifecyclePhase;
use thiserror::Error;
pub type SidecarResult<T = ()> = Result<T, SidecarError>;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
#[error("sidecar role failed during {phase:?}: {message}")]
pub struct SidecarError {
pub child_id: ChildId,
pub primary_child_id: ChildId,
pub phase: RoleLifecyclePhase,
pub message: String,
}
impl SidecarError {
pub fn new(
child_id: ChildId,
primary_child_id: ChildId,
phase: RoleLifecyclePhase,
message: impl Into<String>,
) -> Self {
Self {
child_id,
primary_child_id,
phase,
message: message.into(),
}
}
pub fn into_task_failure(self) -> TaskFailure {
TaskFailure::new(
TaskFailureKind::Error,
format!("{}_{}", TaskRole::Sidecar.as_str(), self.phase.as_str()),
format!(
"sidecar role child={} primary={} phase={} failed: {}",
self.child_id,
self.primary_child_id,
self.phase.as_str(),
self.message
),
)
}
}