gewe-core 0.1.4

Core types and definitions for gewe WeChat SDK
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddContactsRequest<'a> {
    #[serde(rename = "appId")]
    pub app_id: &'a str,
    pub scene: i32,
    pub option: i32,
    pub v3: &'a str,
    pub v4: &'a str,
    pub content: &'a str,
}

pub type AddContactsResponse = ();

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetFriendRemarkRequest<'a> {
    #[serde(rename = "appId")]
    pub app_id: &'a str,
    pub wxid: &'a str,
    pub remark: &'a str,
}

pub type SetFriendRemarkResponse = ();

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetFriendPermissionsRequest<'a> {
    #[serde(rename = "appId")]
    pub app_id: &'a str,
    pub wxid: &'a str,
    #[serde(rename = "onlyChat")]
    pub only_chat: bool,
}

pub type SetFriendPermissionsResponse = ();

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UploadPhoneAddressListRequest<'a> {
    #[serde(rename = "appId")]
    pub app_id: &'a str,
    pub phones: Vec<&'a str>,
    #[serde(rename = "opType")]
    pub op_type: i32,
}

pub type UploadPhoneAddressListResponse = ();

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteFriendRequest<'a> {
    #[serde(rename = "appId")]
    pub app_id: &'a str,
    pub wxid: &'a str,
}

pub type DeleteFriendResponse = ();

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add_contacts_request_serialization() {
        let req = AddContactsRequest {
            app_id: "test_app",
            scene: 1,
            option: 2,
            v3: "test_v3",
            v4: "test_v4",
            content: "Hello, add me!",
        };
        let json = serde_json::to_string(&req).unwrap();
        assert!(json.contains("test_app"));
        assert!(json.contains("Hello, add me!"));
        assert!(json.contains("test_v3"));
        assert!(json.contains("test_v4"));
    }

    #[test]
    fn test_set_friend_remark_request_serialization() {
        let req = SetFriendRemarkRequest {
            app_id: "test_app",
            wxid: "wxid_test",
            remark: "My Best Friend",
        };
        let json = serde_json::to_string(&req).unwrap();
        assert!(json.contains("test_app"));
        assert!(json.contains("wxid_test"));
        assert!(json.contains("My Best Friend"));
    }

    #[test]
    fn test_set_friend_permissions_request_serialization() {
        let req = SetFriendPermissionsRequest {
            app_id: "test_app",
            wxid: "wxid_test",
            only_chat: true,
        };
        let json = serde_json::to_string(&req).unwrap();
        assert!(json.contains("test_app"));
        assert!(json.contains("wxid_test"));
        assert!(json.contains("true"));
    }

    #[test]
    fn test_upload_phone_address_list_request_serialization() {
        let req = UploadPhoneAddressListRequest {
            app_id: "test_app",
            phones: vec!["12345678901", "12345678902"],
            op_type: 1,
        };
        let json = serde_json::to_string(&req).unwrap();
        assert!(json.contains("test_app"));
        assert!(json.contains("12345678901"));
        assert!(json.contains("12345678902"));
    }

    #[test]
    fn test_delete_friend_request_serialization() {
        let req = DeleteFriendRequest {
            app_id: "test_app",
            wxid: "wxid_test",
        };
        let json = serde_json::to_string(&req).unwrap();
        assert!(json.contains("test_app"));
        assert!(json.contains("wxid_test"));
    }
}