Skip to main content

synckit_core/
error.rs

1//! Error types for SyncKit
2
3use thiserror::Error;
4
5/// Result type alias for SyncKit operations
6pub type Result<T> = std::result::Result<T, SyncError>;
7
8/// Main error type for SyncKit operations
9#[derive(Error, Debug, Clone)]
10pub enum SyncError {
11    #[error("Document not found: {0}")]
12    DocumentNotFound(String),
13
14    #[error("Field not found: {0}")]
15    FieldNotFound(String),
16
17    #[error("Invalid timestamp: {0}")]
18    InvalidTimestamp(String),
19
20    #[error("Serialization error: {0}")]
21    SerializationError(String),
22
23    #[error("Deserialization error: {0}")]
24    DeserializationError(String),
25
26    #[error("Storage error: {0}")]
27    StorageError(String),
28
29    #[error("Network error: {0}")]
30    NetworkError(String),
31
32    #[error("Conflict error: {0}")]
33    ConflictError(String),
34
35    #[error("Invalid operation: {0}")]
36    InvalidOperation(String),
37
38    #[error("Protocol error: {0}")]
39    Protocol(String),
40}
41
42impl SyncError {
43    /// Check if this error is retryable
44    pub fn is_retryable(&self) -> bool {
45        matches!(
46            self,
47            SyncError::NetworkError(_) | SyncError::StorageError(_) | SyncError::ConflictError(_)
48        )
49    }
50
51    /// Get error code for client communication
52    pub fn code(&self) -> &'static str {
53        match self {
54            SyncError::DocumentNotFound(_) => "DOCUMENT_NOT_FOUND",
55            SyncError::FieldNotFound(_) => "FIELD_NOT_FOUND",
56            SyncError::InvalidTimestamp(_) => "INVALID_TIMESTAMP",
57            SyncError::SerializationError(_) => "SERIALIZATION_ERROR",
58            SyncError::DeserializationError(_) => "DESERIALIZATION_ERROR",
59            SyncError::StorageError(_) => "STORAGE_ERROR",
60            SyncError::NetworkError(_) => "NETWORK_ERROR",
61            SyncError::ConflictError(_) => "CONFLICT_ERROR",
62            SyncError::InvalidOperation(_) => "INVALID_OPERATION",
63            SyncError::Protocol(_) => "PROTOCOL_ERROR",
64        }
65    }
66}