commonware_storage/adb/sync/
error.rs1use crate::adb::sync::Target;
4use commonware_cryptography::Digest;
5
6#[derive(Debug, thiserror::Error)]
8pub enum Error<T, U, D>
9where
10 T: std::error::Error + Send + 'static,
11 U: std::error::Error + Send + 'static,
12 D: Digest,
13{
14 #[error("database error: {0}")]
16 Database(T),
17 #[error("resolver error: {0:?}")]
19 Resolver(U),
20 #[error("root digest mismatch - expected {expected:?}, got {actual:?}")]
22 RootMismatch { expected: D, actual: D },
23 #[error("invalid bounds: lower bound {lower_bound_pos} > upper bound {upper_bound_pos}")]
25 InvalidTarget {
26 lower_bound_pos: u64,
27 upper_bound_pos: u64,
28 },
29 #[error("invalid client state")]
31 InvalidState,
32 #[error("sync target root unchanged")]
34 SyncTargetRootUnchanged,
35 #[error("sync target moved backward: {old:?} -> {new:?}")]
37 SyncTargetMovedBackward { old: Target<D>, new: Target<D> },
38 #[error("sync already completed")]
40 AlreadyComplete,
41 #[error("sync stalled - no pending fetches")]
43 SyncStalled,
44 #[error("error extracting pinned nodes: {0}")]
46 PinnedNodes(String),
47}
48
49impl<T, U, D> Error<T, U, D>
50where
51 T: std::error::Error + Send + 'static,
52 U: std::error::Error + Send + 'static,
53 D: Digest,
54{
55 pub fn resolver(err: impl Into<U>) -> Self {
56 Self::Resolver(err.into())
57 }
58
59 pub fn database(err: impl Into<T>) -> Self {
60 Self::Database(err.into())
61 }
62}