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};

#[derive(Debug, Serialize, Deserialize)]
pub struct ConsumeEntitlement {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@Uses")]
    pub uses: i32,
    #[serde(rename = "@bOveruse")]
    pub b_overuse: bool,
    #[serde(rename = "Entitlement")]
    pub entitlement: Entitlement,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ConsumeEntitlementResponse {
    #[serde(rename = "Entitlement")]
    pub entitlement: Entitlement,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Entitlement {
    #[serde(rename = "@")]
    pub type_: String,
    #[serde(rename = "@ItemId")]
    pub item_id: String,
    #[serde(rename = "@EntitlementId")]
    pub entitlement_id: String,
    #[serde(rename = "@EntitlementTag")]
    pub entitlement_tag: String,
    #[serde(rename = "@Group")]
    pub group: String,
    #[serde(rename = "@ResourceId")]
    pub resource_id: String,
    #[serde(rename = "@UseCount")]
    pub use_count: i32,
    #[serde(rename = "@Expiration")]
    pub expiration: String,
    #[serde(rename = "@GrantDate")]
    pub grant_date: String,
    #[serde(rename = "@LastModifiedDate")]
    pub last_modified_date: String,
    #[serde(rename = "@Version")]
    pub version: i32,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ExtendTrial {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@RequestTicket")]
    pub request_ticket: String,
    #[serde(rename = "@TicketEngine")]
    pub ticket_engine: i32,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ExtendTrialResponse {
    #[serde(rename = "@Code")]
    pub code: i32,
    #[serde(rename = "@TotalTimeRemaining")]
    pub total_time_remaining: i32,
    #[serde(rename = "@TimeGranted")]
    pub time_granted: i32,
    #[serde(rename = "@ResponseTicket")]
    pub response_ticket: String,
    #[serde(
        default = "ExtendTrialResponse::default_retry_count",
        rename = "@RetryCount"
    )]
    pub retry_count: i32,
    #[serde(
        default = "ExtendTrialResponse::default_retry_after_fail_sec",
        rename = "@RetryAfterFailSec"
    )]
    pub retry_after_fail_sec: i32,
    #[serde(
        default = "ExtendTrialResponse::default_extend_before_expire_sec",
        rename = "@ExtendBeforeExpireSec"
    )]
    pub extend_before_expire_sec: i32,
    #[serde(
        default = "ExtendTrialResponse::default_sleep_before_nuke_sec",
        rename = "@SleepBeforeNukeSec"
    )]
    pub sleep_before_nuke_sec: i32,
}

impl ExtendTrialResponse {
    #[must_use]
    pub fn default_retry_count() -> i32 {
        5i32
    }

    #[must_use]
    pub fn default_retry_after_fail_sec() -> i32 {
        10i32
    }

    #[must_use]
    pub fn default_extend_before_expire_sec() -> i32 {
        60i32
    }

    #[must_use]
    pub fn default_sleep_before_nuke_sec() -> i32 {
        20i32
    }
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryEntitlements {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@OfferId")]
    pub offer_id: String,
    #[serde(rename = "@ItemId")]
    pub item_id: String,
    #[serde(rename = "@Group")]
    pub group: String,
    #[serde(rename = "@includeChildGroups")]
    pub include_child_groups: bool,
    #[serde(rename = "@includeExpiredTrialDLC")]
    pub include_expired_trial_dlc: bool,
    #[serde(rename = "FilterOffers")]
    pub filter_offers: Vec<String>,
    #[serde(rename = "FilterItems")]
    pub filter_items: Vec<String>,
    #[serde(rename = "FilterGroups")]
    pub filter_groups: Vec<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryEntitlementsResponse {
    #[serde(rename = "Entitlements")]
    pub entitlements: Vec<Entitlement>,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryManifestResponse {
    #[serde(rename = "Entitlements")]
    pub entitlements: Vec<Entitlement>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RefreshEntitlements;

#[derive(Debug, Serialize, Deserialize)]
pub struct RequestLicense {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@RequestTicket")]
    pub request_ticket: String,
    #[serde(rename = "@TicketEngine")]
    pub ticket_engine: i32,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct RequestLicenseResponse {
    #[serde(rename = "@License")]
    pub license: String,
}