agentlink_core/protocols/
message.rs1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Message {
9 pub id: String,
10 pub conversation_id: String,
11 pub sender_id: String,
12 pub content: Option<String>,
13 pub message_type: String,
14 pub status: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub reply_to_id: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub data: Option<Value>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub execute_at: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub complete_at: Option<String>,
23 pub created_at: String,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub deleted_at: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize)]
31pub struct SendMessageRequest {
32 pub conversation_id: String,
33 pub content: String,
34 pub message_type: String, #[serde(skip_serializing_if = "Option::is_none")]
36 pub reply_to_id: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub data: Option<Value>,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct MessagesResponse {
44 pub messages: Vec<Message>,
45 pub total: i32,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct SyncMessageHistoryData {
53 pub conversation_id: String,
54 pub messages: Vec<Message>,
55 pub has_more: bool,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub next_page: Option<i32>,
58 pub sync_id: i64,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct NewMessageData {
64 pub conversation_id: String,
65 pub message: Message,
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
75 fn test_send_message_request_serialization() {
76 let request = SendMessageRequest {
77 conversation_id: "660f9511-f3ac-52e5-b827-557766551111".to_string(),
78 content: "你好,这是一条测试消息".to_string(),
79 message_type: "text".to_string(),
80 reply_to_id: None,
81 data: None,
82 };
83
84 let json = serde_json::to_string(&request).unwrap();
85 println!("Serialized JSON: {}", json);
86
87 assert!(json.contains("\"message_type\":\"text\""), "字段名应该是 message_type,不是 type");
89 assert!(!json.contains("\"type\":"), "不应该包含 type 字段");
90 assert!(json.contains("\"conversation_id\":\"660f9511-f3ac-52e5-b827-557766551111\""));
91 assert!(json.contains("\"content\":\"你好,这是一条测试消息\""));
92
93 let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
95 assert_eq!(parsed["conversation_id"], "660f9511-f3ac-52e5-b827-557766551111");
96 assert_eq!(parsed["content"], "你好,这是一条测试消息");
97 assert_eq!(parsed["message_type"], "text");
98 }
99}