walletkit_core/storage/
error.rs1use thiserror::Error;
4
5pub type StorageResult<T> = Result<T, StorageError>;
7
8#[derive(Debug, Error, uniffi::Error)]
10pub enum StorageError {
11 #[error("keystore error: {0}")]
13 Keystore(String),
14
15 #[error("blob store error: {0}")]
17 BlobStore(String),
18
19 #[error("storage lock error: {0}")]
21 Lock(String),
22
23 #[error("serialization error: {0}")]
25 Serialization(String),
26
27 #[error("crypto error: {0}")]
29 Crypto(String),
30
31 #[error("invalid envelope: {0}")]
33 InvalidEnvelope(String),
34
35 #[error("invalid input: {0}")]
37 InvalidInput(String),
38
39 #[error("unsupported envelope version: {0}")]
41 UnsupportedEnvelopeVersion(u32),
42
43 #[error("vault db error: {0}")]
45 VaultDb(String),
46
47 #[error("cache db error: {0}")]
49 CacheDb(String),
50
51 #[error("persistent storage error: {0}")]
53 PersistentStorage(String),
54
55 #[error("leaf index mismatch: expected {expected}, got {provided}")]
57 InvalidLeafIndex {
58 expected: u64,
60 provided: u64,
62 },
63
64 #[error("vault integrity check failed: {0}")]
66 CorruptedVault(String),
67
68 #[error("storage not initialized")]
70 NotInitialized,
71
72 #[error("nullifier already disclosed")]
74 NullifierAlreadyDisclosed,
75
76 #[error("credential not found")]
78 CredentialNotFound,
79
80 #[error("credential id not found: {credential_id}")]
82 CredentialIdNotFound {
83 credential_id: u64,
85 },
86
87 #[error("corrupted cache entry at {key_prefix}")]
89 CorruptedCacheEntry {
90 key_prefix: u8,
92 },
93
94 #[error("activity db error: {0}")]
96 ActivityDb(String),
97
98 #[error("invalid activity record: {0}")]
100 ActivityInvalidRecord(String),
101
102 #[error("unexpected uniffi callback error: {0}")]
104 UnexpectedUniFFICallbackError(String),
105}
106
107impl From<uniffi::UnexpectedUniFFICallbackError> for StorageError {
108 fn from(error: uniffi::UnexpectedUniFFICallbackError) -> Self {
109 Self::UnexpectedUniFFICallbackError(error.reason)
110 }
111}
112
113impl From<walletkit_db::StoreError> for StorageError {
121 fn from(err: walletkit_db::StoreError) -> Self {
122 match err {
123 walletkit_db::StoreError::Keystore(s) => Self::Keystore(s),
124 walletkit_db::StoreError::BlobStore(s) => Self::BlobStore(s),
125 walletkit_db::StoreError::Lock(s) => Self::Lock(s),
126 walletkit_db::StoreError::Serialization(s) => Self::Serialization(s),
127 walletkit_db::StoreError::Crypto(s) => Self::Crypto(s),
128 walletkit_db::StoreError::InvalidEnvelope(s) => Self::InvalidEnvelope(s),
129 walletkit_db::StoreError::InvalidInput(s) => Self::InvalidInput(s),
130 walletkit_db::StoreError::UnsupportedEnvelopeVersion(v) => {
131 Self::UnsupportedEnvelopeVersion(v)
132 }
133 walletkit_db::StoreError::Db(e) => Self::VaultDb(e.to_string()),
134 walletkit_db::StoreError::IntegrityCheckFailed(s) => {
135 Self::CorruptedVault(s)
136 }
137 }
138 }
139}