use std::path::PathBuf;
use crate::xpt::XptVersion;
#[derive(thiserror::Error, Debug)]
#[non_exhaustive]
pub enum Error {
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("unsupported XPT version: {version:?}")]
UnsupportedVersion {
version: XptVersion,
},
#[error("corrupt xpt: {message}")]
Corrupt {
message: String,
},
#[error("invalid schema: {message}")]
InvalidSchema {
message: String,
},
#[error("validation failed: {message}")]
ValidationFailed {
message: String,
},
#[error("metadata error: {message}")]
Metadata {
message: String,
},
#[error("member not found: {domain_code}")]
MemberNotFound {
domain_code: String,
},
#[error(
"column length mismatch: column '{column_name}' has {actual} rows, expected {expected}"
)]
ColumnLengthMismatch {
column_name: String,
actual: usize,
expected: usize,
},
#[error("path error: {message} (path: {path:?})")]
Path {
message: String,
path: PathBuf,
},
#[error("encoding error: {message}")]
Encoding {
message: String,
},
#[cfg(feature = "polars")]
#[error("polars error: {message}")]
Polars {
message: String,
},
}
impl Error {
#[must_use]
pub fn corrupt(message: impl Into<String>) -> Self {
Self::Corrupt {
message: message.into(),
}
}
#[must_use]
pub fn invalid_schema(message: impl Into<String>) -> Self {
Self::InvalidSchema {
message: message.into(),
}
}
#[must_use]
pub fn validation_failed(message: impl Into<String>) -> Self {
Self::ValidationFailed {
message: message.into(),
}
}
#[must_use]
pub fn metadata(message: impl Into<String>) -> Self {
Self::Metadata {
message: message.into(),
}
}
#[must_use]
pub fn encoding(message: impl Into<String>) -> Self {
Self::Encoding {
message: message.into(),
}
}
}
pub type Result<T> = std::result::Result<T, Error>;