tuwunel_service/rooms/pdu_metadata/
mod.rs1use std::sync::Arc;
2
3use ruma::{
4 events::{AnySyncMessageLikeEvent, room::encrypted::Relation},
5 serde::Raw,
6};
7use serde::Deserialize;
8use tuwunel_core::{Result, matrix::Pdu};
9use tuwunel_database::Map;
10
11mod bundling;
12mod purge;
13mod references;
14mod relations;
15pub(crate) mod typed_relations;
16
17#[cfg(test)]
18mod tests;
19
20pub struct Service {
21 services: Arc<crate::services::OnceServices>,
22 db: Data,
23}
24
25struct Data {
26 tofrom_relation: Arc<Map>,
27 relatesto_typed: Arc<Map>,
28 referencedevents: Arc<Map>,
29 softfailedeventids: Arc<Map>,
30}
31
32#[derive(Deserialize)]
33struct ExtractRelatesTo {
34 #[serde(rename = "m.relates_to")]
35 relates_to: Relation,
36}
37
38pub enum IgnoredThreadView {
49 Unchanged,
50 Omitted,
51 Adjusted {
52 root: Option<Box<Pdu>>,
53 count: Option<usize>,
54 latest: Option<Raw<AnySyncMessageLikeEvent>>,
55 },
56}
57
58impl crate::Service for Service {
59 fn build(args: &crate::Args<'_>) -> Result<Arc<Self>> {
60 Ok(Arc::new(Self {
61 services: args.services.clone(),
62 db: Data {
63 tofrom_relation: args.db["tofrom_relation"].clone(),
64 relatesto_typed: args.db["relatesto_typed"].clone(),
65 referencedevents: args.db["referencedevents"].clone(),
66 softfailedeventids: args.db["softfailedeventids"].clone(),
67 },
68 }))
69 }
70
71 fn name(&self) -> &str { crate::service::make_name(std::module_path!()) }
72}