kvp.rs

 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}