#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum ProofFrameError {
#[error("Arrow error: {0}")]
Arrow(#[from] arrow::error::ArrowError),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("invalid regular expression: {0}")]
Regex(#[from] regex::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("invalid UTF-8 in diff data: {0}")]
Utf8(#[from] std::string::FromUtf8Error),
#[error("invalid contract: {0}")]
InvalidContract(String),
#[error("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("corrupt diff partition data: {0}")]
CorruptData(String),
#[error("invalid proof receipt: {0}")]
InvalidReceipt(String),
}