use std::collections::BTreeMap;
use salvo::prelude::*;
use serde::{Deserialize, Serialize};
use crate::events::StateEventType;
use crate::{OwnedRoomId, OwnedServerName, OwnedServerSigningKeyId, OwnedUserId, third_party::Medium};
#[derive(ToSchema, Deserialize, Debug)]
pub struct BindCallbackReqBody {
pub medium: Medium,
pub address: String,
pub mxid: OwnedUserId,
pub invites: Vec<ThirdPartyInvite>,
}
#[derive(ToSchema, Debug, Clone, Deserialize, Serialize)]
pub struct ThirdPartyInvite {
pub medium: Medium,
pub address: String,
pub mxid: OwnedUserId,
pub room_id: OwnedRoomId,
pub sender: OwnedUserId,
pub signed: BTreeMap<OwnedServerName, BTreeMap<OwnedServerSigningKeyId, String>>,
}
impl ThirdPartyInvite {
pub fn new(
address: String,
mxid: OwnedUserId,
room_id: OwnedRoomId,
sender: OwnedUserId,
signed: BTreeMap<OwnedServerName, BTreeMap<OwnedServerSigningKeyId, String>>,
) -> Self {
Self {
medium: Medium::Email,
address,
mxid,
room_id,
sender,
signed,
}
}
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct ExchangeInviteReqBody {
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
#[serde(rename = "type")]
pub kind: StateEventType,
pub sender: OwnedUserId,
pub state_key: OwnedUserId,
pub content: ThirdPartyInvite,
}
impl ExchangeInviteReqBody {
pub fn new(room_id: OwnedRoomId, sender: OwnedUserId, state_key: OwnedUserId, content: ThirdPartyInvite) -> Self {
Self {
room_id,
kind: StateEventType::RoomMember,
sender,
state_key,
content,
}
}
}