Skip to main content

tuwunel_api/client/
filter.rs

1use axum::extract::State;
2use ruma::api::client::filter::{create_filter, get_filter};
3use tuwunel_core::{Result, err};
4
5use crate::Ruma;
6
7/// # `GET /_matrix/client/r0/user/{userId}/filter/{filterId}`
8///
9/// Loads a filter that was previously created.
10///
11/// - A user can only access their own filters
12pub(crate) async fn get_filter_route(
13	State(services): State<crate::State>,
14	body: Ruma<get_filter::v3::Request>,
15) -> Result<get_filter::v3::Response> {
16	services
17		.users
18		.get_filter(body.sender_user(), &body.filter_id)
19		.await
20		.map(get_filter::v3::Response::new)
21		.map_err(|_| err!(Request(NotFound("Filter not found."))))
22}
23
24/// # `PUT /_matrix/client/r0/user/{userId}/filter`
25///
26/// Creates a new filter to be used by other endpoints.
27pub(crate) async fn create_filter_route(
28	State(services): State<crate::State>,
29	body: Ruma<create_filter::v3::Request>,
30) -> Result<create_filter::v3::Response> {
31	let filter_id = services
32		.users
33		.create_filter(body.sender_user(), &body.filter);
34
35	Ok(create_filter::v3::Response::new(filter_id))
36}