use serde::{Deserialize, Serialize};
#[cfg(feature = "utoipa")]
use utoipa::ToSchema;
#[cfg(feature = "validator")]
use validator::Validate;
use crate::v1::types::{ChannelId, RoleId, RoomId, UserId};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "validator", derive(Validate))]
pub struct SearchMessageRequest {
#[cfg_attr(
feature = "utoipa",
schema(required = false, min_length = 1, max_length = 2048)
)]
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 2048)))]
#[serde(default)]
pub query: Option<String>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub room_id: Vec<RoomId>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub thread_id: Vec<ChannelId>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub user_id: Vec<UserId>,
pub has_attachment: Option<bool>,
pub has_image: Option<bool>,
pub has_audio: Option<bool>,
pub has_video: Option<bool>,
pub has_link: Option<bool>,
pub has_embed: Option<bool>,
pub pinned: Option<bool>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub link_hostnames: Vec<String>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub mentions_users: Vec<UserId>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub mentions_roles: Vec<RoleId>,
pub mentions_everyone: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "validator", derive(Validate))]
pub struct SearchChannelsRequest {
#[cfg_attr(
feature = "utoipa",
schema(required = false, min_length = 1, max_length = 2048)
)]
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 2048)))]
#[serde(default)]
pub query: Option<String>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub room_id: Vec<RoomId>,
#[serde(default)]
#[cfg_attr(feature = "validator", validate(length(max = 128)))]
pub parent_id: Vec<ChannelId>,
pub archived: Option<bool>,
pub removed: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "validator", derive(Validate))]
pub struct SearchRoomsRequest {
#[cfg_attr(
feature = "utoipa",
schema(required = false, min_length = 1, max_length = 2048)
)]
#[cfg_attr(feature = "validator", validate(length(min = 1, max = 2048)))]
pub query: String,
}