///|
/// `open` 和事务操作失败时抛出这个错误,调用方按构造器分支。
pub(all) suberror DbError {
  /// `close` 之后还在使用这个库或事务。
  Closed
  /// `begin` 时上一个事务还没有 `commit` 或 `abort`。
  TxnOpen
  /// 事务已经提交或撤销,句柄不能再使用。
  TxnClosed
  /// 事务正在提交;不能同时读写、撤销或关闭。
  TxnBusy
  /// 提交发生 I/O 错误;关闭此句柄并重新打开,让 WAL 决定最终结果。
  RecoveryRequired
  /// `value` 超过 `max_value_len`,或者 key 和 value 放不进一页。
  ValueTooLarge
  /// 页文件头、节点结构或完整 WAL 帧损坏;不完整日志尾部除外。
  Corrupt
  /// 读或写文件失败。参数是底层错误文本。
  Io(String)
} derive(Eq, Debug)

///|
pub extend DbError with Eq::{equal, not_equal}

///|
pub extend DbError with @debug.Debug::{to_repr}

///|
pub impl Show for DbError with fn output(self, logger) {
  logger.write_string(self.to_repr().to_string())
}

///|
pub extend DbError with Show::{output, to_string}