1use rocksdb::Error as RocksError;
2use std::error::Error;
3use std::fmt;
4use std::io::Error as IOError;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum DatabaseError {
8 NotFound,
9 InvalidData,
10 Internal(String),
11}
12
13impl From<IOError> for DatabaseError {
14 fn from(err: IOError) -> Self {
15 DatabaseError::Internal(err.to_string())
16 }
17}
18
19impl From<RocksError> for DatabaseError {
20 fn from(err: RocksError) -> Self {
21 DatabaseError::Internal(err.to_string())
22 }
23}
24
25impl Error for DatabaseError {}
26impl fmt::Display for DatabaseError {
27 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
28 let printable = match *self {
29 DatabaseError::NotFound => "not found".to_owned(),
30 DatabaseError::InvalidData => "invalid data".to_owned(),
31 DatabaseError::Internal(ref err) => format!("internal error: {:?}", err),
32 };
33 write!(f, "{}", printable)
34 }
35}