cdk_sql_common/mint/
keyvalue.rs1use async_trait::async_trait;
4use cdk_common::database::Error;
5
6use super::{SQLMintDatabase, SQLTransaction};
7use crate::database::ConnectionWithTransaction;
8use crate::pool::DatabasePool;
9
10#[async_trait]
11impl<RM> cdk_common::database::KVStoreTransaction<Error> for SQLTransaction<RM>
12where
13 RM: DatabasePool + 'static,
14{
15 async fn kv_read(
16 &mut self,
17 primary_namespace: &str,
18 secondary_namespace: &str,
19 key: &str,
20 ) -> Result<Option<Vec<u8>>, Error> {
21 crate::keyvalue::kv_read_in_transaction(
22 &self.inner,
23 primary_namespace,
24 secondary_namespace,
25 key,
26 )
27 .await
28 }
29
30 async fn kv_write(
31 &mut self,
32 primary_namespace: &str,
33 secondary_namespace: &str,
34 key: &str,
35 value: &[u8],
36 ) -> Result<(), Error> {
37 crate::keyvalue::kv_write_in_transaction(
38 &self.inner,
39 primary_namespace,
40 secondary_namespace,
41 key,
42 value,
43 )
44 .await
45 }
46
47 async fn kv_remove(
48 &mut self,
49 primary_namespace: &str,
50 secondary_namespace: &str,
51 key: &str,
52 ) -> Result<(), Error> {
53 crate::keyvalue::kv_remove_in_transaction(
54 &self.inner,
55 primary_namespace,
56 secondary_namespace,
57 key,
58 )
59 .await
60 }
61
62 async fn kv_list(
63 &mut self,
64 primary_namespace: &str,
65 secondary_namespace: &str,
66 ) -> Result<Vec<String>, Error> {
67 crate::keyvalue::kv_list_in_transaction(&self.inner, primary_namespace, secondary_namespace)
68 .await
69 }
70}
71
72#[async_trait]
73impl<RM> cdk_common::database::KVStoreDatabase for SQLMintDatabase<RM>
74where
75 RM: DatabasePool + 'static,
76{
77 type Err = Error;
78
79 async fn kv_read(
80 &self,
81 primary_namespace: &str,
82 secondary_namespace: &str,
83 key: &str,
84 ) -> Result<Option<Vec<u8>>, Error> {
85 crate::keyvalue::kv_read(&self.pool, primary_namespace, secondary_namespace, key).await
86 }
87
88 async fn kv_list(
89 &self,
90 primary_namespace: &str,
91 secondary_namespace: &str,
92 ) -> Result<Vec<String>, Error> {
93 crate::keyvalue::kv_list(&self.pool, primary_namespace, secondary_namespace).await
94 }
95}
96
97#[async_trait]
98impl<RM> cdk_common::database::KVStore for SQLMintDatabase<RM>
99where
100 RM: DatabasePool + 'static,
101{
102 async fn begin_transaction(
103 &self,
104 ) -> Result<Box<dyn cdk_common::database::KVStoreTransaction<Self::Err> + Send + Sync>, Error>
105 {
106 Ok(Box::new(SQLTransaction {
107 inner: ConnectionWithTransaction::new(
108 self.pool.get().map_err(|e| Error::Database(Box::new(e)))?,
109 )
110 .await?,
111 }))
112 }
113}