persistent_keystore_rs/
errors.rs1
2use std::fmt;
3use crate::structs::Database;
4use std::sync::PoisonError;
5
6#[derive(Debug)]
7pub enum DatabaseError {
8 TableExists(String),
9 TableDoesNotExist(String),
10 TableMissingPrimaryKey,
11 TableNameNotSet,
12 TableMustContainFields,
13 EntryMustContainFields,
14 EntryExists,
15 EntryDoesNotExists,
16 DatabaseIoError(std::io::Error),
17 DatabaseExistsError,
18 DatabaseDoesNotExist(String),
19 UnsupportedField(String),
20 MissingRequiredField(String),
21 MismatchedFieldType,
22 UnsupportedFieldType,
23 DatabaseSerializationError(Box<bincode::ErrorKind>),
24 UnableToGetLock,
25 InvalidPrimaryKey,
26 DatabaseDecompressionError(lz4_flex::block::DecompressError),
27 DatabaseCompressionError(lz4_flex::block::CompressError),
28}
29
30impl fmt::Display for DatabaseError {
31 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32 let msg = match self {
33 DatabaseError::TableMustContainFields => format!("Table must contain at least one field"),
34 DatabaseError::TableNameNotSet => format!("Table name must not be empty"),
35 DatabaseError::TableMissingPrimaryKey => format!("Missing primary key from table"),
36 DatabaseError::TableExists(t) => format!("Table {} already exists", t),
37 DatabaseError::TableDoesNotExist(t) => format!("Table {} does not exist", t),
38 DatabaseError::EntryExists => format!("Entry exists"),
39 DatabaseError::EntryDoesNotExists => format!("Entry does not exist"),
40 DatabaseError::DatabaseExistsError => format!("Database already exists"),
41 DatabaseError::DatabaseIoError(e) => format!("Database IO Error: {}", e),
42 DatabaseError::DatabaseDoesNotExist(d) => format!("Database {} is not found", d),
43 DatabaseError::UnsupportedField(f) => format!("Field name {} is not supported on table", f),
44 DatabaseError::MissingRequiredField(f) => format!("Missing required field {}", f),
45 DatabaseError::MismatchedFieldType => format!("Field is not a supported type"),
46 DatabaseError::UnsupportedFieldType => format!("Field is not a supported type"),
47 DatabaseError::DatabaseSerializationError(e) => format!("Received Database Serialization error: {}", e),
48 DatabaseError::UnableToGetLock => format!("Unable to acquire lock on database"),
49 DatabaseError::InvalidPrimaryKey => format!("Invalid primary key"),
50 DatabaseError::EntryMustContainFields => format!("Entry must contain at least one field"),
51 DatabaseError::DatabaseCompressionError(e) => format!("Database compression error {}", e),
52 DatabaseError::DatabaseDecompressionError(e) => format!("Database decompression error {}", e),
53 };
54 write!(f, "{}", msg)
55 }
56}
57
58impl From<std::io::Error> for DatabaseError {
59 fn from(e: std::io::Error) -> DatabaseError {
60 DatabaseError::DatabaseIoError(e)
61 }
62}
63
64impl From<Box<bincode::ErrorKind>> for DatabaseError {
65 fn from(e: Box<bincode::ErrorKind>) -> DatabaseError {
66 DatabaseError::DatabaseSerializationError(e)
67 }
68}
69
70impl From<PoisonError<Database>> for DatabaseError {
71 fn from(_: PoisonError<Database>) -> DatabaseError {
72 DatabaseError::UnableToGetLock
73 }
74}
75
76impl From<PoisonError<&mut Database>> for DatabaseError {
77 fn from(_: PoisonError<&mut Database>) -> DatabaseError {
78 DatabaseError::UnableToGetLock
79 }
80}
81
82impl From<lz4_flex::block::DecompressError> for DatabaseError {
83 fn from(e: lz4_flex::block::DecompressError) -> DatabaseError {
84 DatabaseError::DatabaseDecompressionError(e)
85 }
86}
87
88impl From<lz4_flex::block::CompressError> for DatabaseError {
89 fn from(e: lz4_flex::block::CompressError) -> DatabaseError {
90 DatabaseError::DatabaseCompressionError(e)
91 }
92}