ruma_client_api/membership/
get_member_events.rs1pub mod v3 {
6 use ruma_common::{
11 api::{request, response, Metadata},
12 metadata,
13 serde::Raw,
14 OwnedRoomId,
15 };
16 use ruma_events::room::member::{MembershipState, RoomMemberEvent};
17
18 const METADATA: Metadata = metadata! {
19 method: GET,
20 rate_limited: false,
21 authentication: AccessToken,
22 history: {
23 1.0 => "/_matrix/client/r0/rooms/{room_id}/members",
24 1.1 => "/_matrix/client/v3/rooms/{room_id}/members",
25 }
26 };
27
28 #[request(error = crate::Error)]
30 pub struct Request {
31 #[ruma_api(path)]
33 pub room_id: OwnedRoomId,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
40 #[ruma_api(query)]
41 pub at: Option<String>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
49 #[ruma_api(query)]
50 pub membership: Option<MembershipState>,
51
52 #[serde(skip_serializing_if = "Option::is_none")]
56 #[ruma_api(query)]
57 pub not_membership: Option<MembershipState>,
58 }
59
60 #[response(error = crate::Error)]
62 pub struct Response {
63 pub chunk: Vec<Raw<RoomMemberEvent>>,
65 }
66
67 impl Request {
68 pub fn new(room_id: OwnedRoomId) -> Self {
70 Self { room_id, at: None, membership: None, not_membership: None }
71 }
72 }
73
74 impl Response {
75 pub fn new(chunk: Vec<Raw<RoomMemberEvent>>) -> Self {
77 Self { chunk }
78 }
79 }
80
81 #[cfg(all(test, feature = "server"))]
82 mod tests {
83 use ruma_common::api::IncomingRequest as _;
84
85 use super::{MembershipState, Request};
86
87 #[test]
88 fn deserialization() {
89 let uri = http::Uri::builder()
90 .scheme("https")
91 .authority("example.org")
92 .path_and_query(
93 "/_matrix/client/r0/rooms/!dummy%3Aexample.org/members\
94 ?not_membership=leave\
95 &at=1026",
96 )
97 .build()
98 .unwrap();
99
100 let req = Request::try_from_http_request(
101 http::Request::builder().uri(uri).body(&[] as &[u8]).unwrap(),
102 &["!dummy:example.org"],
103 )
104 .unwrap();
105
106 assert_eq!(req.room_id, "!dummy:example.org");
107 assert_eq!(req.at.as_deref(), Some("1026"));
108 assert_eq!(req.membership, None);
109 assert_eq!(req.not_membership, Some(MembershipState::Leave));
110 }
111 }
112}