use crate::events::{AnyMessageLikeEvent, TimelineEventType, relation::RelationType};
use crate::{Direction, OwnedEventId, OwnedRoomId, serde::RawJson};
use salvo::oapi::{ToParameters, ToSchema};
use serde::{Deserialize, Serialize};
#[derive(ToParameters, Deserialize, Debug)]
pub struct RelatingEventsWithRelTypeAndEventTypeReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
#[salvo(parameter(parameter_in = Path))]
pub event_id: OwnedEventId,
#[salvo(parameter(parameter_in = Path))]
pub rel_type: RelationType,
#[salvo(parameter(parameter_in = Path))]
pub event_type: TimelineEventType,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub dir: Direction,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub to: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub limit: Option<usize>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub recurse: bool,
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct RelatingEventsWithRelTypeReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
#[salvo(parameter(parameter_in = Path))]
pub event_id: OwnedEventId,
#[salvo(parameter(parameter_in = Path))]
pub rel_type: RelationType,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub dir: Direction,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub to: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub limit: Option<usize>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub recurse: bool,
}
#[derive(ToParameters, Deserialize, Debug)]
pub struct RelatingEventsReqArgs {
#[salvo(parameter(parameter_in = Path))]
pub room_id: OwnedRoomId,
#[salvo(parameter(parameter_in = Path))]
pub event_id: OwnedEventId,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub dir: Direction,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub to: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[salvo(parameter(parameter_in = Query))]
pub limit: Option<usize>,
#[serde(default, skip_serializing_if = "crate::serde::is_default")]
#[salvo(parameter(parameter_in = Query))]
pub recurse: bool,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct RelationEventsResBody {
#[salvo(schema(value_type = Object, additional_properties = true))]
pub chunk: Vec<RawJson<AnyMessageLikeEvent>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_batch: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prev_batch: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub recursion_depth: Option<u64>,
}