memory.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //! In-memory database that is provided by the `cdk-sqlite` crate, mainly for testing purposes.
  2. use std::collections::HashMap;
  3. use cdk_common::common::LnKey;
  4. use cdk_common::database::{self, MintDatabase};
  5. use cdk_common::mint::{self, MintKeySetInfo, MintQuote};
  6. use cdk_common::nuts::{CurrencyUnit, Id, MeltBolt11Request, Proofs};
  7. use cdk_common::MintInfo;
  8. use uuid::Uuid;
  9. use super::MintSqliteDatabase;
  10. /// Creates a new in-memory [`MintSqliteDatabase`] instance
  11. pub async fn empty() -> Result<MintSqliteDatabase, database::Error> {
  12. #[cfg(not(feature = "sqlcipher"))]
  13. let db = MintSqliteDatabase::new(":memory:").await?;
  14. #[cfg(feature = "sqlcipher")]
  15. let db = MintSqliteDatabase::new(":memory:", "memory".to_string()).await?;
  16. db.migrate().await;
  17. Ok(db)
  18. }
  19. /// Creates a new in-memory [`MintSqliteDatabase`] instance with the given state
  20. #[allow(clippy::too_many_arguments)]
  21. pub async fn new_with_state(
  22. active_keysets: HashMap<CurrencyUnit, Id>,
  23. keysets: Vec<MintKeySetInfo>,
  24. mint_quotes: Vec<MintQuote>,
  25. melt_quotes: Vec<mint::MeltQuote>,
  26. pending_proofs: Proofs,
  27. spent_proofs: Proofs,
  28. melt_request: Vec<(MeltBolt11Request<Uuid>, LnKey)>,
  29. mint_info: MintInfo,
  30. ) -> Result<MintSqliteDatabase, database::Error> {
  31. let db = empty().await?;
  32. for active_keyset in active_keysets {
  33. db.set_active_keyset(active_keyset.0, active_keyset.1)
  34. .await?;
  35. }
  36. for keyset in keysets {
  37. db.add_keyset_info(keyset).await?;
  38. }
  39. for quote in mint_quotes {
  40. db.add_mint_quote(quote).await?;
  41. }
  42. for quote in melt_quotes {
  43. db.add_melt_quote(quote).await?;
  44. }
  45. db.add_proofs(pending_proofs, None).await?;
  46. db.add_proofs(spent_proofs, None).await?;
  47. for (melt_request, ln_key) in melt_request {
  48. db.add_melt_request(melt_request, ln_key).await?;
  49. }
  50. db.set_mint_info(mint_info).await?;
  51. Ok(db)
  52. }