tuwunel_api/client/membership/
leave.rs1use axum::extract::State;
2use futures::FutureExt;
3use ruma::api::client::membership::leave_room;
4use tuwunel_core::Result;
5
6use crate::Ruma;
7
8pub(crate) async fn leave_room_route(
14 State(services): State<crate::State>,
15 body: Ruma<leave_room::v3::Request>,
16) -> Result<leave_room::v3::Response> {
17 let state_lock = services.state.mutex.lock(&body.room_id).await;
18
19 services
20 .membership
21 .leave(body.sender_user(), &body.room_id, body.reason.clone(), false, &state_lock)
22 .boxed()
23 .await?;
24
25 if services.config.delete_rooms_after_leave {
26 services
27 .delete
28 .delete_if_empty_local(&body.room_id, state_lock)
29 .boxed()
30 .await;
31 }
32
33 Ok(leave_room::v3::Response {})
34}