commonware_storage/qmdb/sync/
error.rs1use crate::{
4 merkle::{Family, Location},
5 qmdb::{self},
6};
7use commonware_cryptography::Digest;
8
9#[derive(Debug, thiserror::Error)]
11pub enum ServeError<F: Family> {
12 #[error("source database error: {0}")]
13 Database(#[from] qmdb::Error<F>),
14 #[error("source missing")]
15 MissingSource,
16}
17
18#[derive(Debug, thiserror::Error)]
19pub enum EngineError<F: Family, D: Digest> {
20 #[error("root digest mismatch - expected {expected:?}, got {actual:?}")]
22 RootMismatch { expected: D, actual: D },
23 #[error("source returned no valid response")]
25 InvalidResponse,
26 #[error("invalid bounds: lower bound {lower_bound_pos} > upper bound {upper_bound_pos}")]
28 InvalidTarget {
29 lower_bound_pos: Location<F>,
30 upper_bound_pos: Location<F>,
31 },
32 #[error("invalid client state")]
34 InvalidState,
35 #[error("sync target root unchanged")]
37 SyncTargetRootUnchanged,
38 #[error("sync stalled - no pending fetches")]
40 SyncStalled,
41 #[error("sync finish signal channel closed before finish was requested")]
43 FinishChannelClosed,
44}
45
46#[derive(Debug, thiserror::Error)]
48pub enum Error<F, U, D>
49where
50 F: Family,
51 U: std::error::Error + Send + 'static,
52 D: Digest,
53{
54 #[error("database error: {0}")]
56 Database(crate::qmdb::Error<F>),
57
58 #[error("source error: {0:?}")]
60 Source(U),
61
62 #[error("engine error: {0}")]
64 Engine(EngineError<F, D>),
65}
66
67impl<F, T, U, D> From<T> for Error<F, U, D>
68where
69 F: Family,
70 U: std::error::Error + Send + 'static,
71 D: Digest,
72 T: Into<crate::qmdb::Error<F>>,
73{
74 fn from(err: T) -> Self {
75 Self::Database(err.into())
76 }
77}