use core::fmt;
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum MpiError {
InvalidDimension {
dim: usize,
size: usize,
message: String,
},
SizeMismatch {
expected: usize,
actual: usize,
},
CommunicationError {
message: String,
},
InsufficientProcesses {
required: usize,
available: usize,
},
FftError {
message: String,
},
}
impl fmt::Display for MpiError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidDimension { dim, size, message } => {
write!(f, "Invalid dimension {dim} (size {size}): {message}")
}
Self::SizeMismatch { expected, actual } => {
write!(f, "Size mismatch: expected {expected}, got {actual}")
}
Self::CommunicationError { message } => {
write!(f, "MPI communication error: {message}")
}
Self::InsufficientProcesses {
required,
available,
} => {
write!(
f,
"Insufficient processes: need {required}, have {available}"
)
}
Self::FftError { message } => {
write!(f, "FFT error: {message}")
}
}
}
}
impl std::error::Error for MpiError {}