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