use std::fmt;
#[non_exhaustive]
#[derive(Debug)]
pub enum DistError {
Config(String),
EnvContract(String),
Rendezvous(String),
Transport(String),
RankFailed { rank: usize, detail: String },
ReplicaDivergence { tag: String, detail: String },
}
impl fmt::Display for DistError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
DistError::Config(m) => write!(f, "dist config: {m}"),
DistError::EnvContract(m) => write!(f, "dist env contract: {m}"),
DistError::Rendezvous(m) => write!(f, "dist rendezvous: {m}"),
DistError::Transport(m) => write!(f, "dist transport: {m}"),
DistError::RankFailed { rank, detail } => {
write!(f, "dist rank {rank} failed: {detail}")
}
DistError::ReplicaDivergence { tag, detail } => {
write!(f, "dist replica divergence at {tag}: {detail}")
}
}
}
}
impl std::error::Error for DistError {}
impl From<DistError> for String {
fn from(e: DistError) -> Self {
e.to_string()
}
}