mod data; use std::sync::Arc; use conduit::Result; use data::Data; use ruma::{ events::{AnyRawAccountDataEvent, RoomAccountDataEventType}, RoomId, UserId, }; pub struct Service { db: Data, } impl crate::Service for Service { fn build(args: crate::Args<'_>) -> Result> { Ok(Arc::new(Self { db: Data::new(&args), })) } fn name(&self) -> &str { crate::service::make_name(std::module_path!()) } } impl Service { /// Places one event in the account data of the user and removes the /// previous entry. #[allow(clippy::needless_pass_by_value)] pub fn update( &self, room_id: Option<&RoomId>, user_id: &UserId, event_type: RoomAccountDataEventType, data: &serde_json::Value, ) -> Result<()> { self.db.update(room_id, user_id, &event_type, data) } /// Searches the account data for a specific kind. #[allow(clippy::needless_pass_by_value)] pub fn get( &self, room_id: Option<&RoomId>, user_id: &UserId, event_type: RoomAccountDataEventType, ) -> Result>> { self.db.get(room_id, user_id, &event_type) } /// Returns all changes to the account data that happened after `since`. #[tracing::instrument(skip_all, name = "since", level = "debug")] pub fn changes_since( &self, room_id: Option<&RoomId>, user_id: &UserId, since: u64, ) -> Result> { self.db.changes_since(room_id, user_id, since) } }