mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-02 14:54:37 +02:00
28 lines
990 B
Rust
28 lines
990 B
Rust
use std::{collections::HashSet, mem::size_of};
|
|
|
|
use crate::{service, database::KeyValueDatabase, Result, utils};
|
|
|
|
impl service::rooms::auth_chain::Data for KeyValueDatabase {
|
|
fn get_cached_eventid_authchain(&self, shorteventid: u64) -> Result<HashSet<u64>> {
|
|
self.shorteventid_authchain
|
|
.get(&shorteventid.to_be_bytes())?
|
|
.map(|chain| {
|
|
chain
|
|
.chunks_exact(size_of::<u64>())
|
|
.map(|chunk| {
|
|
utils::u64_from_bytes(chunk).expect("byte length is correct")
|
|
})
|
|
.collect()
|
|
})
|
|
}
|
|
|
|
fn cache_eventid_authchain(&self, shorteventid: u64, auth_chain: &HashSet<u64>) -> Result<()> {
|
|
self.shorteventid_authchain.insert(
|
|
&shorteventid.to_be_bytes(),
|
|
&auth_chain
|
|
.iter()
|
|
.flat_map(|s| s.to_be_bytes().to_vec())
|
|
.collect::<Vec<u8>>(),
|
|
)
|
|
}
|
|
}
|