commonware_storage/adb/sync/
error.rs

1//! Shared sync error types that can be used across different database implementations.
2
3use crate::adb::sync::Target;
4use commonware_cryptography::Digest;
5
6/// Errors that can occur during database synchronization.
7#[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    /// Database error
15    #[error("database error: {0}")]
16    Database(T),
17    /// Resolver error
18    #[error("resolver error: {0:?}")]
19    Resolver(U),
20    /// Hash mismatch after sync
21    #[error("root digest mismatch - expected {expected:?}, got {actual:?}")]
22    RootMismatch { expected: D, actual: D },
23    /// Invalid target parameters
24    #[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    /// Invalid client state
30    #[error("invalid client state")]
31    InvalidState,
32    /// Sync target root unchanged
33    #[error("sync target root unchanged")]
34    SyncTargetRootUnchanged,
35    /// Sync target moved backward
36    #[error("sync target moved backward: {old:?} -> {new:?}")]
37    SyncTargetMovedBackward { old: Target<D>, new: Target<D> },
38    /// Sync already completed
39    #[error("sync already completed")]
40    AlreadyComplete,
41    /// Sync stalled - no pending fetches
42    #[error("sync stalled - no pending fetches")]
43    SyncStalled,
44    /// Error extracting pinned nodes
45    #[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}