agentlink-core 0.1.0

AgentLink SDK Core - Platform agnostic core library
Documentation
//! Conversation Protocol Types

use serde::{Deserialize, Serialize};

use super::message::Message;

/// 会话
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Conversation {
    pub id: String,
    #[serde(rename = "type")]
    pub conversation_type: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub avatar: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub max_members: Option<i32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub created_by_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_msg_at: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_msg_id: Option<String>,
    #[serde(default = "default_timestamp")]
    pub created_at: String,
    #[serde(default = "default_timestamp")]
    pub updated_at: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub deleted_at: Option<String>,
    /// 可选的最近消息列表(预览)
    #[serde(skip_serializing_if = "Option::is_none")]
    pub messages: Option<Vec<Message>>,
    /// 最后一条消息预览
    #[serde(skip_serializing_if = "Option::is_none")]
    pub last_message: Option<Message>,
}

fn default_timestamp() -> String {
    chrono::Utc::now().to_rfc3339()
}

/// 会话列表响应
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConversationsResponse {
    pub conversations: Vec<Conversation>,
    pub total: i32,
}

/// 创建或获取会话请求
#[derive(Debug, Clone, Serialize)]
pub struct CreateConversationRequest {
    #[serde(rename = "type")]
    pub conversation_type: String,
    pub member_ids: Vec<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

/// 创建或获取会话响应
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateConversationResponse {
    pub conversation_id: String,
}

/// 同步会话列表数据
/// 
/// Protocol: mqtt-events.md#sync_conversation_list
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SyncConversationListData {
    pub conversations: Vec<Conversation>,
    pub total: i32,
    pub sync_id: i64,
}

/// 会话成员
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConversationMember {
    pub id: String,
    pub conversation_id: String,
    pub user_id: String,
    pub role: String,
    pub joined_at: String,
    pub last_read_at: Option<String>,
    pub unread_count: i32,
    pub is_muted: bool,
    pub created_at: String,
    pub updated_at: String,
}