#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum ProofFrameError {
#[error("{0}")]
Arrow(#[from] arrow::error::ArrowError),
#[error("{0}")]
Io(#[from] std::io::Error),
#[error("{0}")]
Regex(#[from] regex::Error),
#[error("{0}")]
Json(#[from] serde_json::Error),
#[error("{0}")]
Utf8(#[from] std::string::FromUtf8Error),
#[error("{0}")]
InvalidContract(String),
#[error("Key column `{0}` is missing")]
MissingColumn(String),
#[error("Unsupported Arrow type `{0}` for canonical fingerprinting")]
UnsupportedType(String),
#[error("Schemas differ; {0}")]
SchemaMismatch(String),
#[error("Duplicate key `{0}`; diff keys must be unique")]
DuplicateKey(String),
#[error("At least one key column is required")]
NoKeyColumns,
#[error("{0}")]
CorruptData(String),
#[error("{0}")]
InvalidReceipt(String),
}