Skip to main content

plexus_comms/activations/telegram/
types.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4// Request types
5#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
6pub struct SendMessageParams {
7    pub chat_id: String,
8    pub text: String,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub parse_mode: Option<ParseMode>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub reply_to_message_id: Option<i64>,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
16#[serde(rename_all = "PascalCase")]
17pub enum ParseMode {
18    Markdown,
19    Html,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
23pub struct SendPhotoParams {
24    pub chat_id: String,
25    pub photo: String, // File ID or URL
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub caption: Option<String>,
28}
29
30// Response/Event types
31#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
32#[serde(tag = "type", rename_all = "snake_case")]
33pub enum SendMessageEvent {
34    Sent {
35        message_id: i64,
36        chat_id: String,
37    },
38    Error {
39        message: String,
40        code: Option<String>,
41    },
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
45#[serde(tag = "type", rename_all = "snake_case")]
46pub enum UpdateEvent {
47    Message {
48        message_id: i64,
49        chat_id: String,
50        from_user: String,
51        text: String,
52        timestamp: i64,
53    },
54    CallbackQuery {
55        query_id: String,
56        from_user: String,
57        data: String,
58    },
59    Error {
60        message: String,
61    },
62}