use crate::{base::KeyKind, manifest::ManifestError};
use derive_more::{Display, Error, From};
use num_enum::TryFromPrimitiveError;
#[derive(Debug, Display, Error, From)]
pub enum StorageError {
#[display("i/o error: {}", _0)]
IoError(std::io::Error),
#[display("failed to encode: {}", _0)]
BincodeError(bincode::Error),
#[display("manifest: {}", _0)]
Manifest(ManifestError),
#[display("invalid key kind: {}", _0.number)]
InvalidKeyKind(TryFromPrimitiveError<KeyKind>),
#[display("wal header corrupted: expected filenum {} but got {}", expected, got)]
WalCorruption { expected: u64, got: u64 },
#[display("storage worker died")]
WorkerDied,
}