Conduit is a simple, fast and reliable chat server powered by Matrix https://conduit.rs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
use crate::Result; |
|
use ruma::{DeviceId, UserId}; |
|
use sled::IVec; |
|
|
|
#[derive(Clone)] |
|
pub struct TransactionIds { |
|
pub(super) userdevicetxnid_response: sled::Tree, // Response can be empty (/sendToDevice) or the event id (/send) |
|
} |
|
|
|
impl TransactionIds { |
|
pub fn add_txnid( |
|
&self, |
|
user_id: &UserId, |
|
device_id: &DeviceId, |
|
txn_id: &str, |
|
data: &[u8], |
|
) -> Result<()> { |
|
let mut key = user_id.as_bytes().to_vec(); |
|
key.push(0xff); |
|
key.extend_from_slice(device_id.as_bytes()); |
|
key.push(0xff); |
|
key.extend_from_slice(txn_id.as_bytes()); |
|
|
|
self.userdevicetxnid_response.insert(key, data)?; |
|
|
|
Ok(()) |
|
} |
|
|
|
pub fn existing_txnid( |
|
&self, |
|
user_id: &UserId, |
|
device_id: &DeviceId, |
|
txn_id: &str, |
|
) -> Result<Option<IVec>> { |
|
let mut key = user_id.as_bytes().to_vec(); |
|
key.push(0xff); |
|
key.extend_from_slice(device_id.as_bytes()); |
|
key.push(0xff); |
|
key.extend_from_slice(txn_id.as_bytes()); |
|
|
|
// If there's no entry, this is a new transaction |
|
Ok(self.userdevicetxnid_response.get(key)?) |
|
} |
|
}
|
|
|