use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum FitsCubeError {
#[error("FITS I/O error: {0}")]
Fits(#[from] fitsio::errors::Error),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("shape error: {0}")]
Shape(#[from] ndarray::ShapeError),
#[error("missing header keyword: {0}")]
MissingKeyword(String),
#[error("target axis missing: {0}")]
TargetAxisMissing(String),
#[error("channel missing: {0}")]
ChannelMissing(String),
#[error("output file {0} already exists (use overwrite)")]
OutputExists(PathBuf),
#[error("invalid spectral input: {0}")]
InvalidSpec(String),
#[error("unsupported NAXIS={0}")]
UnsupportedNaxis(i64),
#[error("could not parse DATE-OBS {value:?}: {msg}")]
TimeParse { value: String, msg: String },
#[error("{0}")]
Other(String),
}
impl From<atfits_rs::AtfitsError> for FitsCubeError {
fn from(e: atfits_rs::AtfitsError) -> Self {
use atfits_rs::AtfitsError as A;
match e {
A::Fits(e) => FitsCubeError::Fits(e),
A::Io(e) => FitsCubeError::Io(e),
A::MissingKeyword(s) => FitsCubeError::MissingKeyword(s),
A::TargetAxisMissing(s) => FitsCubeError::TargetAxisMissing(s),
A::UnsupportedNaxis(n) => FitsCubeError::UnsupportedNaxis(n),
A::Other(s) => FitsCubeError::Other(s),
}
}
}
pub type Result<T> = std::result::Result<T, FitsCubeError>;