origin-sdk 0.2.0

A Rust implementation of the Origin SDK, which is used in games to communicate with the EA Desktop client.
Documentation
use serde::{Deserialize, Serialize};

use crate::protocol::friends::Friend;

#[derive(Debug, Serialize, Deserialize)]
pub struct CreateGroup {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@GroupName")]
    pub group_name: String,
    #[serde(rename = "@GroupType")]
    pub group_type: GroupType,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct EnterGroup {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@GroupId")]
    pub group_id: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct GetGroupInfo {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@GroupId")]
    pub group_id: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct GroupEnterEvent {
    #[serde(rename = "GroupInfo")]
    pub group_info: GroupInfo,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct GroupEvent {
    #[serde(rename = "Friend", default)]
    pub members: Vec<Friend>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct GroupInfo {
    #[serde(rename = "@GroupName")]
    pub group_name: String,
    #[serde(rename = "@GroupId")]
    pub group_id: String,
    #[serde(rename = "@GroupType")]
    pub group_type: GroupType,
    #[serde(rename = "@CanInviteNewMembers")]
    pub can_invite_new_members: bool,
    #[serde(rename = "@CanRemoveMembers")]
    pub can_remove_members: bool,
    #[serde(rename = "@CanSendGameInvites")]
    pub can_send_game_invites: bool,
    #[serde(
        rename = "@MaxGroupSize",
        default = "GroupInfo::default_max_group_size"
    )]
    pub max_group_size: i32,
}

impl GroupInfo {
    #[must_use]
    pub fn default_max_group_size() -> i32 {
        16i32
    }
}

#[derive(Debug, Serialize, Deserialize)]
pub struct GroupLeaveEvent {
    #[serde(rename = "@GroupId")]
    pub group_id: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum GroupType {
    #[serde(rename = "PUBLIC")]
    Public,
    #[serde(rename = "PRIVATE")]
    Private,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct LeaveGroup {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryGroup {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@GroupId")]
    pub group_id: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryGroupResponse {
    #[serde(rename = "Friend", default)]
    pub members: Vec<Friend>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RemoveUsersFromGroup {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "FriendId", default)]
    pub friend_id: Vec<u64>,
}