use salvo::prelude::*;
use serde::{Deserialize, Serialize};
use crate::client::account::IdentityServerInfo;
use crate::client::account::ThirdPartyIdRemovalStatus;
use crate::client::uiaa::AuthData;
use crate::third_party::Medium;
use crate::third_party::ThirdPartyIdentifier;
use crate::{OwnedClientSecret, OwnedSessionId};
#[derive(ToSchema, Serialize, Debug)]
pub struct ThreepidsResBody {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub three_pids: Vec<ThirdPartyIdentifier>,
}
impl ThreepidsResBody {
pub fn new(three_pids: Vec<ThirdPartyIdentifier>) -> Self {
Self { three_pids }
}
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct AddThreepidReqBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthData>,
pub client_secret: OwnedClientSecret,
pub sid: OwnedSessionId,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct BindThreepidReqBody {
pub client_secret: OwnedClientSecret,
#[serde(flatten)]
pub identity_server_info: IdentityServerInfo,
pub sid: OwnedSessionId,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct UnbindThreepidReqBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
pub medium: Medium,
pub address: String,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct UnbindThreepidResBody {
pub id_server_unbind_result: ThirdPartyIdRemovalStatus,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct DeleteThreepidReqBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id_server: Option<String>,
pub medium: Medium,
pub address: String,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct DeleteThreepidResBody {
pub id_server_unbind_result: ThirdPartyIdRemovalStatus,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct TokenViaEmailReqBody {
pub client_secret: OwnedClientSecret,
pub email: String,
pub send_attempt: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct TokenViaEmailResBody {
pub sid: OwnedSessionId,
#[serde(
skip_serializing_if = "Option::is_none",
default,
deserialize_with = "crate::serde::empty_string_as_none"
)]
pub submit_url: Option<String>,
}
#[derive(ToSchema, Deserialize, Debug)]
pub struct TokenViaMsisdnReqBody {
pub client_secret: OwnedClientSecret,
pub country: String,
pub phone_number: String,
pub send_attempt: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct TokenViaMsisdnResBody {
pub sid: OwnedSessionId,
#[serde(
skip_serializing_if = "Option::is_none",
default,
deserialize_with = "crate::serde::empty_string_as_none"
)]
pub submit_url: Option<String>,
}