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 .await?;
23
24 if services.config.delete_rooms_after_leave {
25 services
26 .delete
27 .delete_if_empty_local(&body.room_id, state_lock)
28 .boxed()
29 .await;
30 }
31
32 Ok(leave_room::v3::Response {})
33}