mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-17 07:41:23 +01:00
40 lines
1.3 KiB
Rust
40 lines
1.3 KiB
Rust
use std::sync::Arc;
|
|
|
|
use ruma::{EventId, RoomId};
|
|
|
|
use crate::{database::KeyValueDatabase, service, Result};
|
|
|
|
impl service::rooms::pdu_metadata::Data for KeyValueDatabase {
|
|
fn add_relation(&self, from: u64, to: u64) -> Result<()> {
|
|
let mut key = from.to_be_bytes().to_vec();
|
|
key.extend_from_slice(&to.to_be_bytes());
|
|
self.fromto_relation.insert(&key, &[])?;
|
|
Ok(())
|
|
}
|
|
|
|
fn mark_as_referenced(&self, room_id: &RoomId, event_ids: &[Arc<EventId>]) -> Result<()> {
|
|
for prev in event_ids {
|
|
let mut key = room_id.as_bytes().to_vec();
|
|
key.extend_from_slice(prev.as_bytes());
|
|
self.referencedevents.insert(&key, &[])?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn is_event_referenced(&self, room_id: &RoomId, event_id: &EventId) -> Result<bool> {
|
|
let mut key = room_id.as_bytes().to_vec();
|
|
key.extend_from_slice(event_id.as_bytes());
|
|
Ok(self.referencedevents.get(&key)?.is_some())
|
|
}
|
|
|
|
fn mark_event_soft_failed(&self, event_id: &EventId) -> Result<()> {
|
|
self.softfailedeventids.insert(event_id.as_bytes(), &[])
|
|
}
|
|
|
|
fn is_event_soft_failed(&self, event_id: &EventId) -> Result<bool> {
|
|
self.softfailedeventids
|
|
.get(event_id.as_bytes())
|
|
.map(|o| o.is_some())
|
|
}
|
|
}
|