ruma_federation_api/membership/create_invite/
v1.rs1use ruma_common::{
6 api::{request, response, Metadata},
7 metadata,
8 serde::Raw,
9 MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedServerName, OwnedUserId,
10};
11use ruma_events::{room::member::RoomMemberEventContent, AnyStrippedStateEvent, StateEventType};
12use serde::{Deserialize, Serialize};
13use serde_json::value::RawValue as RawJsonValue;
14
15const METADATA: Metadata = metadata! {
16 method: PUT,
17 rate_limited: false,
18 authentication: ServerSignatures,
19 history: {
20 1.0 => "/_matrix/federation/v1/invite/:room_id/:event_id",
21 }
22};
23
24#[request]
26pub struct Request {
27 #[ruma_api(path)]
29 pub room_id: OwnedRoomId,
30
31 #[ruma_api(path)]
33 pub event_id: OwnedEventId,
34
35 pub sender: OwnedUserId,
37
38 pub origin: OwnedServerName,
40
41 pub origin_server_ts: MilliSecondsSinceUnixEpoch,
43
44 #[serde(rename = "type")]
46 pub kind: StateEventType,
47
48 pub state_key: OwnedUserId,
50
51 pub content: RoomMemberEventContent,
53
54 #[serde(default, skip_serializing_if = "UnsignedEventContent::is_empty")]
56 pub unsigned: UnsignedEventContent,
57}
58
59#[response]
61pub struct Response {
62 #[ruma_api(body)]
64 #[serde(with = "crate::serde::v1_pdu")]
65 pub event: Box<RawJsonValue>,
66}
67
68#[derive(Clone, Debug, Default, Serialize, Deserialize)]
70#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
71pub struct UnsignedEventContent {
72 #[serde(skip_serializing_if = "<[_]>::is_empty")]
76 pub invite_room_state: Vec<Raw<AnyStrippedStateEvent>>,
77}
78
79impl UnsignedEventContent {
80 pub fn new() -> Self {
82 Default::default()
83 }
84
85 pub fn is_empty(&self) -> bool {
87 self.invite_room_state.is_empty()
88 }
89}
90
91#[derive(Debug)]
93#[allow(clippy::exhaustive_structs)]
94pub struct RequestInit {
95 pub room_id: OwnedRoomId,
97
98 pub event_id: OwnedEventId,
100
101 pub sender: OwnedUserId,
103
104 pub origin: OwnedServerName,
106
107 pub origin_server_ts: MilliSecondsSinceUnixEpoch,
109
110 pub state_key: OwnedUserId,
112
113 pub content: RoomMemberEventContent,
115
116 pub unsigned: UnsignedEventContent,
118}
119
120impl From<RequestInit> for Request {
121 fn from(init: RequestInit) -> Self {
123 Self {
124 room_id: init.room_id,
125 event_id: init.event_id,
126 sender: init.sender,
127 origin: init.origin,
128 origin_server_ts: init.origin_server_ts,
129 kind: StateEventType::RoomMember,
130 state_key: init.state_key,
131 content: init.content,
132 unsigned: init.unsigned,
133 }
134 }
135}
136
137impl Response {
138 pub fn new(event: Box<RawJsonValue>) -> Self {
140 Self { event }
141 }
142}