xmtp_db/encrypted_store/
key_store_entry.rs

1use diesel::prelude::*;
2
3use super::{ConnectionExt, StorageError, db_connection::DbConnection, schema::openmls_key_store};
4use crate::{Delete, impl_fetch, impl_store};
5
6#[derive(Insertable, Queryable, Debug, Clone)]
7#[diesel(table_name = openmls_key_store)]
8#[diesel(primary_key(key_bytes))]
9pub struct StoredKeyStoreEntry {
10    pub key_bytes: Vec<u8>,
11    pub value_bytes: Vec<u8>,
12}
13
14impl_fetch!(StoredKeyStoreEntry, openmls_key_store, Vec<u8>);
15impl_store!(StoredKeyStoreEntry, openmls_key_store);
16
17impl<C: ConnectionExt> Delete<StoredKeyStoreEntry> for DbConnection<C> {
18    type Key = Vec<u8>;
19    fn delete(&self, key: Vec<u8>) -> Result<usize, StorageError> where {
20        use super::schema::openmls_key_store::dsl::*;
21        Ok(self.raw_query_write(|conn| {
22            diesel::delete(openmls_key_store.filter(key_bytes.eq(key))).execute(conn)
23        })?)
24    }
25}
26
27pub trait QueryKeyStoreEntry {
28    fn insert_or_update_key_store_entry(
29        &self,
30        key: Vec<u8>,
31        value: Vec<u8>,
32    ) -> Result<(), StorageError>;
33}
34
35impl<T> QueryKeyStoreEntry for &T
36where
37    T: QueryKeyStoreEntry,
38{
39    fn insert_or_update_key_store_entry(
40        &self,
41        key: Vec<u8>,
42        value: Vec<u8>,
43    ) -> Result<(), StorageError> {
44        (**self).insert_or_update_key_store_entry(key, value)
45    }
46}
47
48impl<C: ConnectionExt> QueryKeyStoreEntry for DbConnection<C> {
49    fn insert_or_update_key_store_entry(
50        &self,
51        key: Vec<u8>,
52        value: Vec<u8>,
53    ) -> Result<(), StorageError> {
54        use super::schema::openmls_key_store::dsl::*;
55        let entry = StoredKeyStoreEntry {
56            key_bytes: key,
57            value_bytes: value,
58        };
59
60        self.raw_query_write(|conn| {
61            diesel::replace_into(openmls_key_store)
62                .values(entry)
63                .execute(conn)
64        })?;
65        Ok(())
66    }
67}