kvp.rs

 1use sqlez_macros::sql;
 2
 3use crate::{define_connection, query};
 4
 5define_connection!(pub static ref KEY_VALUE_STORE: KeyValueStore<()> =
 6    &[sql!(
 7        CREATE TABLE IF NOT EXISTS kv_store(
 8            key TEXT PRIMARY KEY,
 9            value TEXT NOT NULL
10        ) STRICT;
11    )];
12);
13
14impl KeyValueStore {
15    query! {
16        pub fn read_kvp(key: &str) -> Result<Option<String>> {
17            SELECT value FROM kv_store WHERE key = (?)
18        }
19    }
20
21    query! {
22        pub async fn write_kvp(key: String, value: String) -> Result<()> {
23            INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))
24        }
25    }
26
27    query! {
28        pub async fn delete_kvp(key: String) -> Result<()> {
29            DELETE FROM kv_store WHERE key = (?)
30        }
31    }
32}
33
34// #[cfg(test)]
35// mod tests {
36//     use crate::kvp::KeyValueStore;
37
38//     #[gpui::test]
39//     async fn test_kvp() {
40//         let db = KeyValueStore(crate::open_test_db("test_kvp").await);
41
42//         assert_eq!(db.read_kvp("key-1").unwrap(), None);
43
44//         db.write_kvp("key-1".to_string(), "one".to_string())
45//             .await
46//             .unwrap();
47//         assert_eq!(db.read_kvp("key-1").unwrap(), Some("one".to_string()));
48
49//         db.write_kvp("key-1".to_string(), "one-2".to_string())
50//             .await
51//             .unwrap();
52//         assert_eq!(db.read_kvp("key-1").unwrap(), Some("one-2".to_string()));
53
54//         db.write_kvp("key-2".to_string(), "two".to_string())
55//             .await
56//             .unwrap();
57//         assert_eq!(db.read_kvp("key-2").unwrap(), Some("two".to_string()));
58
59//         db.delete_kvp("key-1".to_string()).await.unwrap();
60//         assert_eq!(db.read_kvp("key-1").unwrap(), None);
61//     }
62// }