commonware_storage/qmdb/sync/
error.rs1use crate::{mmr::Location, qmdb::sync::Target};
4use commonware_cryptography::Digest;
5
6#[derive(Debug, thiserror::Error)]
7pub enum EngineError<D: Digest> {
8 #[error("root digest mismatch - expected {expected:?}, got {actual:?}")]
10 RootMismatch { expected: D, actual: D },
11 #[error("invalid bounds: lower bound {lower_bound_pos} > upper bound {upper_bound_pos}")]
13 InvalidTarget {
14 lower_bound_pos: Location,
15 upper_bound_pos: Location,
16 },
17 #[error("invalid client state")]
19 InvalidState,
20 #[error("sync target root unchanged")]
22 SyncTargetRootUnchanged,
23 #[error("sync target moved backward: {old:?} -> {new:?}")]
25 SyncTargetMovedBackward { old: Target<D>, new: Target<D> },
26 #[error("sync already completed")]
28 AlreadyComplete,
29 #[error("sync stalled - no pending fetches")]
31 SyncStalled,
32 #[error("sync finish signal channel closed before finish was requested")]
34 FinishChannelClosed,
35 #[error("error extracting pinned nodes: {0}")]
37 PinnedNodes(String),
38}
39
40#[derive(Debug, thiserror::Error)]
42pub enum Error<U, D>
43where
44 U: std::error::Error + Send + 'static,
45 D: Digest,
46{
47 #[error("database error: {0}")]
49 Database(crate::qmdb::Error<crate::merkle::mmr::Family>),
50
51 #[error("resolver error: {0:?}")]
53 Resolver(U),
54
55 #[error("engine error: {0}")]
57 Engine(EngineError<D>),
58}
59
60impl<T, U, D> From<T> for Error<U, D>
61where
62 U: std::error::Error + Send + 'static,
63 D: Digest,
64 T: Into<crate::qmdb::Error<crate::merkle::mmr::Family>>,
65{
66 fn from(err: T) -> Self {
67 Self::Database(err.into())
68 }
69}