1use anyhow::Result;
2use rusqlite::OptionalExtension;
3
4use super::Db;
5
6impl Db {
7 pub fn read_kvp(&self, key: &str) -> Result<Option<String>> {
8 let lock = self.connection.lock();
9 let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?;
10
11 Ok(stmt.query_row([key], |row| row.get(0)).optional()?)
12 }
13
14 pub fn delete_kvp(&self, key: &str) -> Result<()> {
15 let lock = self.connection.lock();
16
17 let mut stmt = lock.prepare_cached("SELECT value FROM kv_store WHERE key = (?)")?;
18
19 stmt.execute([key])?;
20
21 Ok(())
22 }
23
24 pub fn write_kvp(&self, key: &str, value: &str) -> Result<()> {
25 let lock = self.connection.lock();
26
27 let mut stmt =
28 lock.prepare_cached("INSERT OR REPLACE INTO kv_store(key, value) VALUES ((?), (?))")?;
29
30 stmt.execute([key, value])?;
31
32 Ok(())
33 }
34}