signer-remote 0.4.1

Signer remote communication package.
Documentation
use serde::{Deserialize, Serialize};
use signer_core::{SignerKeys, SignerUser};

/// SignerSummary 结构体,用于封装需要跨设备同步的核心用户信息。
/// 它将通过 SignerCrypted 进行端到端加密传输。
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct SignerSummary {
    /// 用户的核心密钥对,包含公钥和私钥。
    /// 接收方将使用此私钥来解密其本地数据。
    pub keys: SignerKeys,

    /// 用户的远程信息,包括公钥、用户名、头像以及允许连接的服务器端点列表。
    /// 接收方将使用这些信息来连接到正确的服务器并同步数据。
    pub user: SignerUser,
}

impl SignerSummary {
    /// 获取用户密钥
    pub fn get_keys(&self) -> &SignerKeys {
        &self.keys
    }

    /// 获取用户信息
    pub fn get_user(&self) -> &SignerUser {
        &self.user
    }

    /// 获取用户名
    pub fn get_username(&self) -> &str {
        &self.user.username
    }

    /// 获取用户公钥
    pub fn get_pub_key(&self) -> &str {
        &self.user.pub_key
    }
}

// 这是一个占位符测试文件,用于验证 SignerSummary 是否能被正确导入和使用。
// 实际的单元测试将在后续阶段添加。

#[cfg(test)]
mod tests {
    use super::SignerSummary;
    use signer_core::{SignerKeys, SignerServer, SignerUser}; // 修正导入路径

    #[test]
    fn test_signer_summary_import_and_build() {
        // 生成一个测试用的 SignerKeys
        let keys = SignerKeys::generate().expect("Failed to generate SignerKeys");

        // 创建一个测试用的 SignerUser
        let user = SignerUser {
            pub_key: keys.pub_key.clone(),
            username: "test_user".to_string(),
            avatar: None,
            update_time: 1234567890,
            servers: vec![SignerServer {
                addr: "https://example.com/api".to_string(),
            }],
        };

        // 尝试创建一个 SignerSummary 实例
        let summary = SignerSummary {
            keys: keys.clone(),
            user: user.clone(),
        };

        // 验证字段是否正确赋值
        assert_eq!(summary.keys.pub_key, keys.pub_key);
        assert_eq!(summary.keys.prv_key, keys.prv_key);
        assert_eq!(summary.user.pub_key, user.pub_key);
        assert_eq!(summary.user.username, user.username);
        assert_eq!(summary.user.servers, user.servers);
    }
}