tuwunel_api_client/delayed_events/
get_delayed_event.rs1use std::time::Duration;
2
3use axum::extract::State;
4use ruma::{
5 MilliSecondsSinceUnixEpoch, UInt,
6 api::client::delayed_events::get_delayed_event::v1::{DelayedEventData, Request, Response},
7 serde::Raw,
8};
9use tuwunel_core::Result;
10use tuwunel_service::delayed_events::Event;
11
12use crate::Ruma;
13
14#[tracing::instrument(level = "debug", skip_all)]
21pub(crate) async fn get_delayed_event_route(
22 State(services): State<crate::State>,
23 body: Ruma<Request>,
24) -> Result<Response> {
25 let event = services
26 .delayed_events
27 .get(&body.delay_id, Some(body.sender_user()))
28 .await?;
29
30 Ok(Response::new(event_data(body.body.delay_id, event)))
31}
32
33fn event_data(delay_id: String, event: Event) -> DelayedEventData {
34 let delayed_since = event.due_ms.saturating_sub(event.delay_ms);
35
36 DelayedEventData {
37 delay_id,
38 room_id: event.room_id,
39 event_type: event.event_type,
40 state_key: event.state_key,
41 delay_ms: Duration::from_millis(event.delay_ms),
42 delayed_since_ts: MilliSecondsSinceUnixEpoch(UInt::new_saturating(delayed_since)),
43 content: Raw::from_raw_value(event.content.json()),
44 finalized: event.finalised,
45 }
46}