cdk_common/database/
mod.rs1#[cfg(feature = "mint")]
4pub mod mint;
5#[cfg(feature = "wallet")]
6mod wallet;
7
8#[cfg(feature = "mint")]
9pub use mint::{
10 Database as MintDatabase, DbTransactionFinalizer as MintDbWriterFinalizer, DynMintDatabase,
11 KVStore as MintKVStore, KVStoreDatabase as MintKVStoreDatabase,
12 KVStoreTransaction as MintKVStoreTransaction, KeysDatabase as MintKeysDatabase,
13 KeysDatabaseTransaction as MintKeyDatabaseTransaction, ProofsDatabase as MintProofsDatabase,
14 ProofsTransaction as MintProofsTransaction, QuotesDatabase as MintQuotesDatabase,
15 QuotesTransaction as MintQuotesTransaction, SignaturesDatabase as MintSignaturesDatabase,
16 SignaturesTransaction as MintSignatureTransaction, Transaction as MintTransaction,
17};
18#[cfg(all(feature = "mint", feature = "auth"))]
19pub use mint::{DynMintAuthDatabase, MintAuthDatabase, MintAuthTransaction};
20#[cfg(feature = "wallet")]
21pub use wallet::Database as WalletDatabase;
22
23#[derive(thiserror::Error, Debug)]
25pub enum ConversionError {
26 #[error("Not enough elements: expected {0}, got {1}")]
28 MissingColumn(usize, usize),
29
30 #[error("Missing parameter {0}")]
32 MissingParameter(String),
33
34 #[error("Invalid type from db, expected {0} got {1}")]
36 InvalidType(String, String),
37
38 #[error("Error converting {1}, expecting type {0}")]
40 InvalidConversion(String, String),
41
42 #[error(transparent)]
44 MintUrl(#[from] crate::mint_url::Error),
45
46 #[error(transparent)]
48 CDKNUT00(#[from] crate::nuts::nut00::Error),
49
50 #[error(transparent)]
52 CDKNUT01(#[from] crate::nuts::nut01::Error),
53
54 #[error(transparent)]
56 CDKNUT02(#[from] crate::nuts::nut02::Error),
57
58 #[error(transparent)]
60 CDKNUT04(#[from] crate::nuts::nut04::Error),
61
62 #[error(transparent)]
64 CDKNUT05(#[from] crate::nuts::nut05::Error),
65
66 #[error(transparent)]
68 CDKNUT07(#[from] crate::nuts::nut07::Error),
69
70 #[error(transparent)]
72 CDKNUT23(#[from] crate::nuts::nut23::Error),
73
74 #[error(transparent)]
76 CDKSECRET(#[from] crate::secret::Error),
77
78 #[error(transparent)]
80 Serde(#[from] serde_json::Error),
81
82 #[error(transparent)]
84 BIP32(#[from] bitcoin::bip32::Error),
85
86 #[error(transparent)]
88 Generic(#[from] Box<crate::Error>),
89}
90
91impl From<crate::Error> for ConversionError {
92 fn from(err: crate::Error) -> Self {
93 ConversionError::Generic(Box::new(err))
94 }
95}
96
97#[derive(Debug, thiserror::Error)]
99pub enum Error {
100 #[error(transparent)]
102 Database(Box<dyn std::error::Error + Send + Sync>),
103
104 #[error("Duplicate entry")]
106 Duplicate,
107 #[error("Amount overflow")]
109 AmountOverflow,
110 #[error("Amount zero")]
112 AmountZero,
113
114 #[error(transparent)]
116 DHKE(#[from] crate::dhke::Error),
117 #[error(transparent)]
119 NUT00(#[from] crate::nuts::nut00::Error),
120 #[error(transparent)]
122 NUT01(#[from] crate::nuts::nut01::Error),
123 #[error(transparent)]
125 NUT02(#[from] crate::nuts::nut02::Error),
126 #[error(transparent)]
128 #[cfg(feature = "auth")]
129 NUT22(#[from] crate::nuts::nut22::Error),
130 #[error(transparent)]
132 NUT04(#[from] crate::nuts::nut04::Error),
133 #[error(transparent)]
135 #[cfg(feature = "mint")]
136 QuoteId(#[from] crate::quote_id::QuoteIdError),
137 #[error(transparent)]
139 Serde(#[from] serde_json::Error),
140 #[error("Unknown Quote")]
142 UnknownQuote,
143 #[error("Attempt to remove spent proof")]
145 AttemptRemoveSpentProof,
146 #[error("Attempt to update state of spent proof")]
148 AttemptUpdateSpentProof,
149 #[error("Proof not found")]
151 ProofNotFound,
152 #[error("Unknown or invalid keyset")]
154 InvalidKeysetId,
155 #[cfg(feature = "mint")]
156 #[error("Invalid state transition")]
158 InvalidStateTransition(crate::state::Error),
159
160 #[error("Invalid credentials {0}")]
162 InvalidConnectionSettings(String),
163
164 #[error("Invalid database response")]
166 InvalidDbResponse,
167
168 #[error("Internal {0}")]
170 Internal(String),
171
172 #[error(transparent)]
174 Conversion(#[from] ConversionError),
175
176 #[error("Missing placeholder value {0}")]
178 MissingPlaceholder(String),
179
180 #[error("Unknown quote ttl")]
182 UnknownQuoteTTL,
183
184 #[error("Invalid UUID: {0}")]
186 InvalidUuid(String),
187
188 #[error("Quote not found")]
190 QuoteNotFound,
191
192 #[error("Invalid KV store key or namespace: {0}")]
194 KVStoreInvalidKey(String),
195}
196
197#[cfg(feature = "mint")]
198impl From<crate::state::Error> for Error {
199 fn from(state: crate::state::Error) -> Self {
200 match state {
201 crate::state::Error::AlreadySpent => Error::AttemptUpdateSpentProof,
202 _ => Error::InvalidStateTransition(state),
203 }
204 }
205}