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