mod.rs 5.1 KB

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