cdk_sqlite/mint/
memory.rs

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