agentlink_core/protocols/
conversation.rs1use serde::{Deserialize, Serialize};
4
5use super::message::Message;
6
7#[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 #[serde(skip_serializing_if = "Option::is_none")]
35 pub messages: Option<Vec<Message>>,
36 #[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#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct ConversationsResponse {
48 pub conversations: Vec<Conversation>,
49 pub total: i32,
50}
51
52#[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#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct CreateConversationResponse {
65 pub conversation_id: String,
66}
67
68#[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#[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}