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::presence::Presence;

#[derive(Debug, Serialize, Deserialize)]
pub struct AddRecentPlayers {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "Player")]
    pub player: Vec<u64>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Friend {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@PersonaId")]
    pub persona_id: u64,
    #[serde(rename = "@Persona")]
    pub persona: String,
    #[serde(rename = "@AvatarId")]
    pub avatar_id: String,
    #[serde(rename = "@Group")]
    pub group: String,
    #[serde(rename = "@GroupId")]
    pub group_id: String,
    #[serde(rename = "@Presence")]
    pub presence: Presence,
    #[serde(rename = "@State")]
    pub state: FriendState,
    #[serde(rename = "@TitleId")]
    pub title_id: String,
    #[serde(rename = "@Title")]
    pub title: String,
    #[serde(rename = "@MultiplayerId")]
    pub multiplayer_id: String,
    #[serde(rename = "@RichPresence")]
    pub rich_presence: String,
    #[serde(rename = "@GamePresence")]
    pub game_presence: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub enum FriendState {
    #[serde(rename = "UNKNOWN")]
    Unknown,
    #[serde(rename = "NONE")]
    None,
    #[serde(rename = "MUTUAL")]
    Mutual,
    #[serde(rename = "INVITED")]
    Invited,
    #[serde(rename = "DECLINED")]
    Declined,
    #[serde(rename = "REQUEST")]
    Request,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct FriendStatus {
    #[serde(rename = "@FriendId")]
    pub friend_id: u64,
    #[serde(rename = "@State")]
    pub state: FriendState,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct FriendsEvent {
    #[serde(rename = "@value")]
    pub value: i32,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryAreFriendsResponse {
    #[serde(rename = "FriendStatus", default)]
    pub users: Vec<FriendStatus>,
}

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

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

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

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