use polars::datatypes::DataType;
use serde::Serialize;
use thiserror::Error;
#[derive(Serialize, Debug, Clone, PartialEq, Eq, Error)]
pub enum MergeColumnsError {
#[error("The codebooks both have entries for column `{0}`")]
DuplicateColumnName(String),
}
#[derive(Clone, Debug, PartialEq, Eq, Error)]
#[error("The row `{0}` alread exists")]
pub struct InsertRowError(pub String);
#[derive(Error, Debug)]
pub enum ReadError {
#[error("Io error: {0}")]
Io(#[from] std::io::Error),
#[error("Polars error: {0}")]
Polars(#[from] polars::prelude::PolarsError),
}
#[derive(Debug, Error)]
pub enum ColMetadataListError {
#[error("Duplicate column name `{0}`")]
Duplicate(String),
}
#[derive(Debug, Error)]
pub enum RowNameListError {
#[error("Duplicate row name `{row_name}` at index {ix_1} and {ix_1}")]
Duplicate {
row_name: String,
ix_1: usize,
ix_2: usize,
},
}
#[derive(Debug, Error)]
pub enum CodebookError {
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("column '{col_name}' is blank")]
BlankColumn { col_name: String },
#[error("cannot infer feature type of column '{col_name}'")]
UnableToInferColumnType { col_name: String },
#[error("Unsupported Arrow dtype `{dtype}` for column `{col_name}`")]
UnsupportedDataType { col_name: String, dtype: DataType },
#[error("column '{col_name}' contains more than 256 categorical classes")]
CategoricalOverflow { col_name: String },
#[error("Column metadata error")]
ColumnMetadata(#[from] ColMetadataListError),
#[error("Row names error: {0}")]
RowNames(#[from] RowNameListError),
#[error("Polars error: {0}")]
Polars(#[from] polars::prelude::PolarsError),
#[error("No `ID` column (row index)")]
NoIdColumn,
#[error("Null values in ID column (row index)")]
NullValuesInIndex,
#[error("Column `{0}` contains only a single unique value")]
SingleValueColumn(String),
#[error("More than one `ID` column.")]
MultipleIdColumns,
#[error("ReadError: {0}")]
Read(#[from] ReadError),
}