#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error(transparent)]
IO(#[from] std::io::Error),
#[error(transparent)]
ObjectStore(#[from] object_store::Error),
#[error(transparent)]
ZarrsArrayCreate(#[from] zarrs::array::ArrayCreateError),
#[error(transparent)]
ZarrsGroupCreate(#[from] zarrs::group::GroupCreateError),
#[error(transparent)]
ZarrsArray(#[from] zarrs::array::ArrayError),
#[error(transparent)]
ZarrsStorage(#[from] zarrs::storage::StorageError),
#[error("Unsupported data type '{0}' for variable '{1}'")]
UnsupportedDataType(String, String),
#[error(
"Unsupported routing algorithm {value:?}. Supported values: {supported_values}",
supported_values = format_allowed_values(allowed)
)]
InvalidAlgorithm {
value: String,
allowed: &'static [&'static str],
},
#[error(
"Invalid dataset shape for variable {variable:?}: expected at least {min_rank} dimensions but found shape {shape:?}"
)]
InvalidDatasetShape {
variable: String,
min_rank: usize,
shape: Vec<u64>,
},
#[allow(dead_code)]
#[error("Undefined error")]
Undefined(String),
}
pub(crate) type Result<T> = core::result::Result<T, Error>;
fn format_allowed_values(allowed: &[&str]) -> String {
allowed
.iter()
.map(|value| format!("{value:?}"))
.collect::<Vec<_>>()
.join(", ")
}