agentlink-core 0.1.0

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

use serde::{Deserialize, Serialize};

/// 用户信息
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: String,
    #[serde(default)]
    pub linkid: String,
    pub nickname: String,
    pub avatar: Option<String>,
    pub status: String,
    /// 在线状态(MQTT 推送字段)
    #[serde(default)]
    pub online: bool,
    /// 设备类型(MQTT 推送字段)
    #[serde(default)]
    pub device_type: Option<String>,
    /// 手机号是否已验证
    #[serde(default)]
    pub phone_verified: bool,
    pub created_at: String,
    pub updated_at: String,
    #[serde(default)]
    pub login_methods: Vec<UserLoginMethod>,
}

/// 用户登录方式
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserLoginMethod {
    pub id: String,
    pub user_id: String,
    pub login_type: String,
    pub identifier: String,
    pub verified: bool,
    pub is_primary: bool,
    pub created_at: String,
    pub updated_at: String,
}

/// 用户隐私设置
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserPrivacySettings {
    pub user_id: String,
    pub allow_friend_request: bool,
    pub require_verification: bool,
    pub friend_request_question: Option<String>,
    pub moments_visibility: String,
    pub allow_stranger_view_moments: bool,
    pub show_online_status: bool,
    pub show_phone_to: String,
    pub find_by_phone: bool,
    pub allow_search_by_linkid: bool,
    pub show_qrcode: bool,
    pub share_location: bool,
    pub created_at: String,
    pub updated_at: String,
}

/// 更新隐私设置请求
#[derive(Debug, Clone, Serialize)]
pub struct UpdatePrivacySettingsRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub allow_friend_request: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub require_verification: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub friend_request_question: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub moments_visibility: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub allow_stranger_view_moments: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub show_online_status: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub show_phone_to: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub find_by_phone: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub allow_search_by_linkid: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub show_qrcode: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub share_location: Option<bool>,
}

/// 黑名单条目
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BlacklistEntry {
    pub id: String,
    pub user_id: String,
    pub blocked_user_id: String,
    pub reason: Option<String>,
    pub is_mutual: bool,
    pub created_at: String,
    pub updated_at: String,
    pub blocked_user: Option<User>,
}

/// 添加到黑名单请求
#[derive(Debug, Clone, Serialize)]
pub struct AddToBlacklistRequest {
    pub blocked_user_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
}