use thiserror::Error;
#[derive(Error, Debug)]
#[error("bad array shape supplied to argument {argument} of function {function}. expected {expected}, received {received}")]
pub struct BadArrayShape {
pub argument: &'static str,
pub function: &'static str,
pub expected: String,
pub received: String,
}
#[derive(Error, Debug)]
#[cfg(feature = "ms")]
pub enum MeasurementSetWriteError {
#[error("Tried to write {rows_attempted} rows, but only {rows_remaining} rows are remaining out of {rows_total}")]
MeasurementSetFull {
rows_attempted: usize,
rows_remaining: usize,
rows_total: usize,
},
#[error(transparent)]
Casacore(#[from] rubbl_casatables::CasacoreError),
#[error(transparent)]
Table(#[from] rubbl_casatables::TableError),
#[error("cannot create directory, path={path} already exists and is not a directory")]
NotADirectory { path: String },
#[error(transparent)]
BadArrayShape(#[from] BadArrayShape),
#[error(transparent)]
StdIo(#[from] std::io::Error),
#[error(transparent)]
SystemTimeError(#[from] std::time::SystemTimeError),
}
#[derive(Error, Debug)]
#[cfg(feature = "cfitsio")]
pub enum UvfitsWriteError {
#[error("Tried to write to row number {row_num}, but only {num_rows} rows are expected")]
BadRowNum {
row_num: usize,
num_rows: usize,
},
#[error("Expected {total} uvfits rows to be written, but only {current} were written")]
NotEnoughRowsWritten {
current: usize,
total: usize,
},
#[error(transparent)]
Fitsio(#[from] fitsio::errors::Error),
#[error(transparent)]
BadString(#[from] std::ffi::NulError),
#[error(transparent)]
StdIo(#[from] std::io::Error),
}
#[cfg(feature = "cfitsio")]
impl From<crate::io::uvfits::FitsioOrCStringError> for UvfitsWriteError {
fn from(e: crate::io::uvfits::FitsioOrCStringError) -> Self {
match e {
super::uvfits::FitsioOrCStringError::Fitsio(e) => Self::Fitsio(e),
super::uvfits::FitsioOrCStringError::Nul(e) => Self::BadString(e),
}
}
}
#[derive(Error, Debug)]
#[allow(clippy::upper_case_acronyms)]
pub enum IOError {
#[error(transparent)]
#[cfg(feature = "ms")]
MeasurementSetWriteError(#[from] MeasurementSetWriteError),
#[cfg(feature = "mwalib")]
#[error(transparent)]
FitsError(#[from] mwalib::FitsError),
#[error(transparent)]
#[cfg(feature = "cfitsio")]
FitsioError(#[from] fitsio::errors::Error),
#[error(transparent)]
#[cfg(feature = "cfitsio")]
UvfitsWriteError(#[from] UvfitsWriteError),
#[error(transparent)]
BadArrayShape(#[from] BadArrayShape),
#[cfg(feature = "ms")]
#[error(transparent)]
Table(#[from] rubbl_casatables::TableError),
}