1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct InboundMessage {
6 pub route: serde_json::Value,
7 pub credential_id: String,
8 pub source: MessageSource,
9 pub text: String,
10 #[serde(default, skip_serializing_if = "Vec::is_empty")]
11 pub attachments: Vec<Attachment>,
12 pub timestamp: chrono::DateTime<chrono::Utc>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub extra_data: Option<serde_json::Value>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct MessageSource {
19 pub protocol: String,
20 pub chat_id: String,
21 pub message_id: String,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub reply_to_message_id: Option<String>,
24 pub from: UserInfo,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct UserInfo {
29 pub id: String,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub username: Option<String>,
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub display_name: Option<String>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct Attachment {
38 pub filename: String,
39 pub mime_type: String,
40 pub size_bytes: u64,
41 pub download_url: String,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47#[allow(dead_code)]
48pub struct OutboundMessage {
49 pub credential_id: String,
50 pub chat_id: String,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub reply_to_message_id: Option<String>,
53 pub text: String,
54 #[serde(default, skip_serializing_if = "Vec::is_empty")]
55 pub file_ids: Vec<String>,
56 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub extra_data: Option<serde_json::Value>,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62#[allow(dead_code)]
63pub struct SendResponse {
64 pub status: String,
65 pub protocol_message_id: String,
66 pub timestamp: chrono::DateTime<chrono::Utc>,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct WsOutboundMessage {
72 pub text: String,
73 pub timestamp: chrono::DateTime<chrono::Utc>,
74 pub message_id: String,
75 #[serde(default, skip_serializing_if = "Vec::is_empty")]
76 pub file_urls: Vec<String>,
77}