botx_api/api/v3/chats/pin_message/
models.rs

1use serde::{Serialize, Deserialize};
2use uuid::Uuid;
3
4use crate::api::{
5    models::*,
6    v3::chats::models::*
7};
8
9/// Запрос на закрепление сообщения в чате
10#[derive(Debug, Serialize, Deserialize, Default, Clone, Builder)]
11#[builder(setter(into, prefix = "with", strip_option))]
12pub struct PinMessageRequest {
13    /// Идентификатор чата
14    pub chat_id: Uuid,
15    
16    /// Идентификатор сообщения
17    pub sync_id: Uuid,
18}
19
20/// Ответ eXpress на запрос закрепления сообщения в чате
21#[derive(Debug, Serialize, Deserialize, Clone)]
22pub struct PinMessageResponse {
23    /// Результат запроса
24    /// 
25    /// TODO: Я не знаю зачем тут строка, всегда должно быть "message_pinned" документация не описывает других вариантов, откройте issue если станет понятно что оно имеет несколько значений чтобы заменить на enum
26    pub result: String,
27}
28
29/// Ошибки при закреплении сообщения в чате
30#[derive(Debug, Serialize, Deserialize, Clone)]
31#[serde(tag = "reason")]
32pub enum PinMessageError {
33    /// Чат не найден
34    #[serde(rename(serialize = "chat_not_found", deserialize = "chat_not_found"))]
35    ChatNotFound(ChatNotFound),
36
37    /// Бот не может закрепить сообщение (скорее всего не админ)
38    #[serde(rename(serialize = "no_permission_for_operation", deserialize = "no_permission_for_operation"))]
39    NoPermissionForOperation(NoPermissionForPinOperation),
40
41    /// Ошибка от Messaging сервиса
42    #[serde(rename(serialize = "error_from_messaging_service", deserialize = "error_from_messaging_service"))]
43    ErrorFromMessagingService(ErrorFromMessagingService),
44
45    // TODO: добавить десериализацию в HashMap<string, string> когда завезут реализацию
46    /// Неопределенная ошибка, смотрите логи
47    #[serde(other)]
48    Other,
49}