Skip to main content

agentlink_core/protocols/
conversation.rs

1//! Conversation Protocol Types
2
3use serde::{Deserialize, Serialize};
4
5use super::message::Message;
6
7/// 会话
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct Conversation {
10    pub id: String,
11    #[serde(rename = "type")]
12    pub conversation_type: String,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub name: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub avatar: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub description: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub max_members: Option<i32>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub created_by_id: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub last_msg_at: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub last_msg_id: Option<String>,
27    #[serde(default = "default_timestamp")]
28    pub created_at: String,
29    #[serde(default = "default_timestamp")]
30    pub updated_at: String,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub deleted_at: Option<String>,
33    /// 可选的最近消息列表(预览)
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub messages: Option<Vec<Message>>,
36    /// 最后一条消息预览
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub last_message: Option<Message>,
39}
40
41fn default_timestamp() -> String {
42    chrono::Utc::now().to_rfc3339()
43}
44
45/// 会话列表响应
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ConversationsResponse {
48    pub conversations: Vec<Conversation>,
49    pub total: i32,
50}
51
52/// 创建或获取会话请求
53#[derive(Debug, Clone, Serialize)]
54pub struct CreateConversationRequest {
55    #[serde(rename = "type")]
56    pub conversation_type: String,
57    pub member_ids: Vec<String>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub name: Option<String>,
60}
61
62/// 创建或获取会话响应
63#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct CreateConversationResponse {
65    pub conversation_id: String,
66}
67
68/// 同步会话列表数据
69/// 
70/// Protocol: mqtt-events.md#sync_conversation_list
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct SyncConversationListData {
73    pub conversations: Vec<Conversation>,
74    pub total: i32,
75    pub sync_id: i64,
76}
77
78/// 会话成员
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct ConversationMember {
81    pub id: String,
82    pub conversation_id: String,
83    pub user_id: String,
84    pub role: String,
85    pub joined_at: String,
86    pub last_read_at: Option<String>,
87    pub unread_count: i32,
88    pub is_muted: bool,
89    pub created_at: String,
90    pub updated_at: String,
91}