use salvo::oapi::{ToParameters, ToSchema};
use serde::{Deserialize, Serialize};
use crate::events::GlobalAccountDataEventType;
use crate::serde::StringEnum;
use crate::{OwnedMxcUri, OwnedRoomId, OwnedUserId, PrivOwnedStr};
#[derive(ToSchema, Clone, PartialEq, Eq, StringEnum)]
#[non_exhaustive]
pub enum ProfileField {
#[palpo_enum(rename = "displayname")]
DisplayName,
#[palpo_enum(rename = "avatar_url")]
AvatarUrl,
#[doc(hidden)]
#[salvo(schema(value_type = String))]
_Custom(PrivOwnedStr),
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct UserRoomReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub user_id: OwnedUserId,
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct UserEventTypeReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub user_id: OwnedUserId,
#[salvo(parameter(parameter_in = Path))]
pub event_type: GlobalAccountDataEventType,
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct UserRoomEventTypeReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub user_id: OwnedUserId,
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
#[salvo(parameter(parameter_in = Path))]
pub event_type: GlobalAccountDataEventType,
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct UserFilterReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub user_id: OwnedUserId,
#[salvo(parameter(parameter_in = Path))]
pub filter_id: String,
}
#[derive(ToSchema, Deserialize, Serialize, Debug)]
pub struct ProfileResBody {
#[serde(
skip_serializing_if = "Option::is_none",
default,
deserialize_with = "crate::serde::empty_string_as_none"
)]
pub avatar_url: Option<OwnedMxcUri>,
#[serde(skip_serializing_if = "Option::is_none", rename = "displayname")]
pub display_name: Option<String>,
#[serde(rename = "xyz.amorgan.blurhash", skip_serializing_if = "Option::is_none")]
pub blurhash: Option<String>,
}
impl ProfileResBody {
pub fn new(avatar_url: Option<OwnedMxcUri>, display_name: Option<String>) -> Self {
Self {
avatar_url,
display_name,
blurhash: None,
}
}
}