use strum::{EnumIter, IntoEnumIterator};
use crate::bindings;
pub type StorageResult<T = ()> = Result<T, StorageError>;
#[derive(Debug, EnumIter)]
pub enum StorageError {
KeyNotFound = bindings::HA_ERR_KEY_NOT_FOUND as isize,
FoundDuppKey = bindings::HA_ERR_FOUND_DUPP_KEY as isize,
InternalError = bindings::HA_ERR_INTERNAL_ERROR as isize,
RecordChanged = bindings::HA_ERR_RECORD_CHANGED as isize,
WrongIndex = bindings::HA_ERR_WRONG_INDEX as isize,
Crashed = bindings::HA_ERR_CRASHED as isize,
WrongInRecord = bindings::HA_ERR_WRONG_IN_RECORD as isize,
OutOfMem = bindings::HA_ERR_OUT_OF_MEM as isize,
RetryInit = bindings::HA_ERR_RETRY_INIT as isize,
NotAtAble = bindings::HA_ERR_NOT_A_TABLE as isize,
WrongCommand = bindings::HA_ERR_WRONG_COMMAND as isize,
OldFile = bindings::HA_ERR_OLD_FILE as isize,
NoActiveRecord = bindings::HA_ERR_NO_ACTIVE_RECORD as isize,
RecordDeleted = bindings::HA_ERR_RECORD_DELETED as isize,
RecordFileFull = bindings::HA_ERR_RECORD_FILE_FULL as isize,
IndexFileFull = bindings::HA_ERR_INDEX_FILE_FULL as isize,
EndOfFile = bindings::HA_ERR_END_OF_FILE as isize,
Unsupported = bindings::HA_ERR_UNSUPPORTED as isize,
ToBigRow = bindings::HA_ERR_TO_BIG_ROW as isize,
GCreateOption = bindings::HA_WRONG_CREATE_OPTION as isize,
FoundDuppUnique = bindings::HA_ERR_FOUND_DUPP_UNIQUE as isize,
UnknownCharset = bindings::HA_ERR_UNKNOWN_CHARSET as isize,
WrongMrgTableDef = bindings::HA_ERR_WRONG_MRG_TABLE_DEF as isize,
CrashedOnRepair = bindings::HA_ERR_CRASHED_ON_REPAIR as isize,
CrashedOnUsage = bindings::HA_ERR_CRASHED_ON_USAGE as isize,
LockWaitTimeout = bindings::HA_ERR_LOCK_WAIT_TIMEOUT as isize,
LockTableFull = bindings::HA_ERR_LOCK_TABLE_FULL as isize,
ReadOnlyTransaction = bindings::HA_ERR_READ_ONLY_TRANSACTION as isize,
LockDeadlock = bindings::HA_ERR_LOCK_DEADLOCK as isize,
CannotAddForeign = bindings::HA_ERR_CANNOT_ADD_FOREIGN as isize,
NoReferencedRow = bindings::HA_ERR_NO_REFERENCED_ROW as isize,
RowIsReferenced = bindings::HA_ERR_ROW_IS_REFERENCED as isize,
NoSavepoint = bindings::HA_ERR_NO_SAVEPOINT as isize,
NonUniqueBlockSize = bindings::HA_ERR_NON_UNIQUE_BLOCK_SIZE as isize,
NoSuchTable = bindings::HA_ERR_NO_SUCH_TABLE as isize,
TableExist = bindings::HA_ERR_TABLE_EXIST as isize,
NoConnection = bindings::HA_ERR_NO_CONNECTION as isize,
NullInSpatial = bindings::HA_ERR_NULL_IN_SPATIAL as isize,
TableDefChanged = bindings::HA_ERR_TABLE_DEF_CHANGED as isize,
NoPartitionFound = bindings::HA_ERR_NO_PARTITION_FOUND as isize,
RbrLoggingFailed = bindings::HA_ERR_RBR_LOGGING_FAILED as isize,
DropIndexFk = bindings::HA_ERR_DROP_INDEX_FK as isize,
ForeignDuplicateKey = bindings::HA_ERR_FOREIGN_DUPLICATE_KEY as isize,
TableNeedsUpgrade = bindings::HA_ERR_TABLE_NEEDS_UPGRADE as isize,
TableReadonly = bindings::HA_ERR_TABLE_READONLY as isize,
AutoincReadFailed = bindings::HA_ERR_AUTOINC_READ_FAILED as isize,
AutoincErange = bindings::HA_ERR_AUTOINC_ERANGE as isize,
Generic = bindings::HA_ERR_GENERIC as isize,
RecordIsTheSame = bindings::HA_ERR_RECORD_IS_THE_SAME as isize,
LoggingImpossible = bindings::HA_ERR_LOGGING_IMPOSSIBLE as isize,
CorruptEvent = bindings::HA_ERR_CORRUPT_EVENT as isize,
NewFile = bindings::HA_ERR_NEW_FILE as isize,
RowsEventApply = bindings::HA_ERR_ROWS_EVENT_APPLY as isize,
Initialization = bindings::HA_ERR_INITIALIZATION as isize,
FileTooShort = bindings::HA_ERR_FILE_TOO_SHORT as isize,
WrongCrc = bindings::HA_ERR_WRONG_CRC as isize,
TooManyConcurrentTrxs = bindings::HA_ERR_TOO_MANY_CONCURRENT_TRXS as isize,
NotInLockPartitions = bindings::HA_ERR_NOT_IN_LOCK_PARTITIONS as isize,
IndexColTooLong = bindings::HA_ERR_INDEX_COL_TOO_LONG as isize,
IndexCorrupt = bindings::HA_ERR_INDEX_CORRUPT as isize,
UndoRecTooBig = bindings::HA_ERR_UNDO_REC_TOO_BIG as isize,
InvalidDocid = bindings::HA_FTS_INVALID_DOCID as isize,
TablespaceExists = bindings::HA_ERR_TABLESPACE_EXISTS as isize,
TooManyFields = bindings::HA_ERR_TOO_MANY_FIELDS as isize,
RowInWrongPartition = bindings::HA_ERR_ROW_IN_WRONG_PARTITION as isize,
RowNotVisible = bindings::HA_ERR_ROW_NOT_VISIBLE as isize,
AbortedByUser = bindings::HA_ERR_ABORTED_BY_USER as isize,
DiskFull = bindings::HA_ERR_DISK_FULL as isize,
IncompatibleDefinition = bindings::HA_ERR_INCOMPATIBLE_DEFINITION as isize,
FtsTooManyWordsInPhrase = bindings::HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE as isize,
DecryptionFailed = bindings::HA_ERR_DECRYPTION_FAILED as isize,
FkDepthExceeded = bindings::HA_ERR_FK_DEPTH_EXCEEDED as isize,
TablespaceMissing = bindings::HA_ERR_TABLESPACE_MISSING as isize,
SequenceInvalidData = bindings::HA_ERR_SEQUENCE_INVALID_DATA as isize,
SequenceRunOut = bindings::HA_ERR_SEQUENCE_RUN_OUT as isize,
CommitError = bindings::HA_ERR_COMMIT_ERROR as isize,
PartitionList = bindings::HA_ERR_PARTITION_LIST as isize,
NoEncryption = bindings::HA_ERR_NO_ENCRYPTION as isize,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn check_error_counts() {
const SKIPPED_ERR_COUNT: usize = 2;
assert_eq!(
StorageError::iter().count() + SKIPPED_ERR_COUNT,
bindings::HA_ERR_ERRORS.try_into().unwrap()
);
}
}