8 changed files with 111 additions and 9 deletions
@ -0,0 +1,43 @@ |
|||||||
|
use crate::Result; |
||||||
|
use ruma::{DeviceId, UserId}; |
||||||
|
use sled::IVec; |
||||||
|
|
||||||
|
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)?) |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue