cdk_common/database/
mod.rs

1//! CDK Database
2
3#[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/// Data conversion error
24#[derive(thiserror::Error, Debug)]
25pub enum ConversionError {
26    /// Missing columns
27    #[error("Not enough elements: expected {0}, got {1}")]
28    MissingColumn(usize, usize),
29
30    /// Missing parameter
31    #[error("Missing parameter {0}")]
32    MissingParameter(String),
33
34    /// Invalid db type
35    #[error("Invalid type from db, expected {0} got {1}")]
36    InvalidType(String, String),
37
38    /// Invalid data conversion in column
39    #[error("Error converting {1}, expecting type {0}")]
40    InvalidConversion(String, String),
41
42    /// Mint Url Error
43    #[error(transparent)]
44    MintUrl(#[from] crate::mint_url::Error),
45
46    /// NUT00 Error
47    #[error(transparent)]
48    CDKNUT00(#[from] crate::nuts::nut00::Error),
49
50    /// NUT01 Error
51    #[error(transparent)]
52    CDKNUT01(#[from] crate::nuts::nut01::Error),
53
54    /// NUT02 Error
55    #[error(transparent)]
56    CDKNUT02(#[from] crate::nuts::nut02::Error),
57
58    /// NUT04 Error
59    #[error(transparent)]
60    CDKNUT04(#[from] crate::nuts::nut04::Error),
61
62    /// NUT05 Error
63    #[error(transparent)]
64    CDKNUT05(#[from] crate::nuts::nut05::Error),
65
66    /// NUT07 Error
67    #[error(transparent)]
68    CDKNUT07(#[from] crate::nuts::nut07::Error),
69
70    /// NUT23 Error
71    #[error(transparent)]
72    CDKNUT23(#[from] crate::nuts::nut23::Error),
73
74    /// Secret Error
75    #[error(transparent)]
76    CDKSECRET(#[from] crate::secret::Error),
77
78    /// Serde Error
79    #[error(transparent)]
80    Serde(#[from] serde_json::Error),
81
82    /// BIP32 Error
83    #[error(transparent)]
84    BIP32(#[from] bitcoin::bip32::Error),
85
86    /// Generic error
87    #[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/// CDK_database error
98#[derive(Debug, thiserror::Error)]
99pub enum Error {
100    /// Database Error
101    #[error(transparent)]
102    Database(Box<dyn std::error::Error + Send + Sync>),
103
104    /// Duplicate entry
105    #[error("Duplicate entry")]
106    Duplicate,
107    /// Amount overflow
108    #[error("Amount overflow")]
109    AmountOverflow,
110    /// Amount zero
111    #[error("Amount zero")]
112    AmountZero,
113
114    /// DHKE error
115    #[error(transparent)]
116    DHKE(#[from] crate::dhke::Error),
117    /// NUT00 Error
118    #[error(transparent)]
119    NUT00(#[from] crate::nuts::nut00::Error),
120    /// NUT01 Error
121    #[error(transparent)]
122    NUT01(#[from] crate::nuts::nut01::Error),
123    /// NUT02 Error
124    #[error(transparent)]
125    NUT02(#[from] crate::nuts::nut02::Error),
126    /// NUT22 Error
127    #[error(transparent)]
128    #[cfg(feature = "auth")]
129    NUT22(#[from] crate::nuts::nut22::Error),
130    /// NUT04 Error
131    #[error(transparent)]
132    NUT04(#[from] crate::nuts::nut04::Error),
133    /// Quote ID Error
134    #[error(transparent)]
135    #[cfg(feature = "mint")]
136    QuoteId(#[from] crate::quote_id::QuoteIdError),
137    /// Serde Error
138    #[error(transparent)]
139    Serde(#[from] serde_json::Error),
140    /// Unknown Quote
141    #[error("Unknown Quote")]
142    UnknownQuote,
143    /// Attempt to remove spent proof
144    #[error("Attempt to remove spent proof")]
145    AttemptRemoveSpentProof,
146    /// Attempt to update state of spent proof
147    #[error("Attempt to update state of spent proof")]
148    AttemptUpdateSpentProof,
149    /// Proof not found
150    #[error("Proof not found")]
151    ProofNotFound,
152    /// Invalid keyset
153    #[error("Unknown or invalid keyset")]
154    InvalidKeysetId,
155    #[cfg(feature = "mint")]
156    /// Invalid state transition
157    #[error("Invalid state transition")]
158    InvalidStateTransition(crate::state::Error),
159
160    /// Invalid connection settings
161    #[error("Invalid credentials {0}")]
162    InvalidConnectionSettings(String),
163
164    /// Unexpected database response
165    #[error("Invalid database response")]
166    InvalidDbResponse,
167
168    /// Internal error
169    #[error("Internal {0}")]
170    Internal(String),
171
172    /// Data conversion error
173    #[error(transparent)]
174    Conversion(#[from] ConversionError),
175
176    /// Missing Placeholder value
177    #[error("Missing placeholder value {0}")]
178    MissingPlaceholder(String),
179
180    /// Unknown quote ttl
181    #[error("Unknown quote ttl")]
182    UnknownQuoteTTL,
183
184    /// Invalid UUID
185    #[error("Invalid UUID: {0}")]
186    InvalidUuid(String),
187
188    /// QuoteNotFound
189    #[error("Quote not found")]
190    QuoteNotFound,
191
192    /// KV Store invalid key or namespace
193    #[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}