pub mod v1 {
use ruma_common::{
OwnedRoomId, OwnedUserId,
api::{auth_scheme::NoAuthentication, request, response},
metadata,
serde::Raw,
thirdparty::Medium,
};
use ruma_events::room::member::SignedContent;
use serde::{Deserialize, Serialize};
metadata! {
method: PUT,
rate_limited: false,
authentication: NoAuthentication,
path: "/_matrix/federation/v1/3pid/onbind",
}
#[request]
pub struct Request {
pub medium: Medium,
pub address: String,
pub mxid: OwnedUserId,
pub invites: Vec<ThirdPartyInvite>,
}
#[response]
#[derive(Default)]
pub struct Response {}
impl Request {
pub fn new(
medium: Medium,
address: String,
mxid: OwnedUserId,
invites: Vec<ThirdPartyInvite>,
) -> Self {
Self { medium, address, mxid, invites }
}
pub fn email(address: String, mxid: OwnedUserId, invites: Vec<ThirdPartyInvite>) -> Self {
Self::new(Medium::Email, address, mxid, invites)
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[cfg_attr(not(ruma_unstable_exhaustive_types), non_exhaustive)]
pub struct ThirdPartyInvite {
pub medium: Medium,
pub address: String,
pub mxid: OwnedUserId,
pub room_id: OwnedRoomId,
pub sender: OwnedUserId,
pub signed: Raw<SignedContent>,
}
impl ThirdPartyInvite {
pub fn new(
address: String,
mxid: OwnedUserId,
room_id: OwnedRoomId,
sender: OwnedUserId,
signed: Raw<SignedContent>,
) -> Self {
Self { medium: Medium::Email, address, mxid, room_id, sender, signed }
}
}
impl Response {
pub fn new() -> Self {
Self {}
}
}
}