1#[derive(Debug, thiserror::Error)]
5pub enum BootnodeError {
6 #[error("snapshot too stale: age {age_secs}s exceeds max {max_allowed}s")]
11 SnapshotTooStale {
12 age_secs: u64,
14 max_allowed: u64,
16 },
17
18 #[error("unsupported snapshot format version: {0}")]
20 UnsupportedSnapshotFormat(u8),
21
22 #[error("unsupported delta format version: {0}")]
24 UnsupportedDeltaFormat(u8),
25
26 #[error("io: {0}")]
28 Io(#[from] std::io::Error),
29
30 #[error("redb: {0}")]
32 Database(#[from] redb::DatabaseError),
33
34 #[error("redb table: {0}")]
36 Table(#[from] redb::TableError),
37
38 #[error("redb transaction: {0}")]
40 Transaction(Box<redb::TransactionError>),
41
42 #[error("redb storage: {0}")]
44 Storage(#[from] redb::StorageError),
45
46 #[error("redb commit: {0}")]
48 Commit(#[from] redb::CommitError),
49
50 #[error("serialize: {0}")]
52 SerializeFailed(#[source] rmp_serde::encode::Error),
53
54 #[error("deserialize: {0}")]
56 DeserializeFailed(#[source] rmp_serde::decode::Error),
57
58 #[error("invalid DaCert data: {0}")]
60 InvalidCertData(String),
61
62 #[error("snapshot body too large: {size} bytes exceeds max {max} bytes")]
64 SnapshotBodyTooLarge {
65 size: usize,
67 max: usize,
69 },
70
71 #[error("snapshot body_len mismatch: header says {header_body_len}, actual {actual}")]
73 SnapshotBodyLenMismatch {
74 header_body_len: u64,
76 actual: u64,
78 },
79
80 #[error("delta field `{field}` too large: {size} bytes exceeds max {max} bytes")]
82 DeltaFieldTooLarge {
83 field: &'static str,
85 size: usize,
87 max: usize,
89 },
90
91 #[error("fetch_range too large: requested {requested} entries exceeds max {max}")]
93 FetchRangeTooLarge {
94 requested: u64,
96 max: u64,
98 },
99}
100
101impl From<redb::TransactionError> for BootnodeError {
102 fn from(e: redb::TransactionError) -> Self {
103 Self::Transaction(Box::new(e))
104 }
105}
106
107impl From<rmp_serde::encode::Error> for BootnodeError {
108 fn from(e: rmp_serde::encode::Error) -> Self {
109 Self::SerializeFailed(e)
110 }
111}
112
113impl From<rmp_serde::decode::Error> for BootnodeError {
114 fn from(e: rmp_serde::decode::Error) -> Self {
115 Self::DeserializeFailed(e)
116 }
117}