use salvo::prelude::*;
use serde::{Deserialize, Serialize};
use crate::events::AnySyncTimelineEvent;
use crate::push::Action;
use crate::serde::RawJson;
use crate::{OwnedRoomId, UnixMillis};
#[derive(ToSchema, Default, Serialize, Deserialize)]
pub struct NotificationsReqBody {
#[salvo(parameter(parameter_in = Query))]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[salvo(parameter(parameter_in = Query))]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<usize>,
#[salvo(parameter(parameter_in = Query))]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub only: Option<String>,
}
#[derive(ToSchema, Serialize, Debug)]
pub struct NotificationsResBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub next_token: Option<String>,
pub notifications: Vec<Notification>,
}
impl NotificationsResBody {
pub fn new(notifications: Vec<Notification>) -> Self {
Self {
next_token: None,
notifications,
}
}
}
#[derive(ToSchema, Deserialize, Serialize, Clone, Debug)]
pub struct Notification {
pub actions: Vec<Action>,
pub event: RawJson<AnySyncTimelineEvent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub profile_tag: Option<String>,
pub read: bool,
pub room_id: OwnedRoomId,
pub ts: UnixMillis,
}