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::entitlements::Entitlement;

#[derive(Debug, Serialize, Deserialize)]
pub struct Catalog {
    #[serde(rename = "@Name")]
    pub name: String,
    #[serde(rename = "@Status")]
    pub status: String,
    #[serde(rename = "@Currency")]
    pub currency_type: String,
    #[serde(rename = "@Group")]
    pub group: String,
    #[serde(rename = "@CatalogId")]
    pub catalog_id: u64,
    #[serde(rename = "Category", default)]
    pub categories: Vec<Category>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Category {
    #[serde(rename = "@Type")]
    pub r#type: String,
    #[serde(rename = "@CategoryId")]
    pub category_id: String,
    #[serde(rename = "@ParentId")]
    pub parent_id: String,
    #[serde(rename = "@Name")]
    pub name: String,
    #[serde(rename = "@Description")]
    pub description: String,
    #[serde(rename = "@MostPopular")]
    pub most_popular: i32,
    #[serde(rename = "@ImageId")]
    pub image_id: String,
    #[serde(rename = "Category", default)]
    pub categories: Vec<Category>,
    #[serde(rename = "Offer", default)]
    pub offers: Vec<Offer>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Checkout {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "@Currency")]
    pub currency: String,
    #[serde(rename = "Offers", default)]
    pub offers: Vec<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct DetermineCommerceCurrency {}

#[derive(Debug, Serialize, Deserialize)]
pub struct Store {
    #[serde(rename = "Catalog", default)]
    pub catalogs: Vec<Catalog>,
    #[serde(rename = "@Name")]
    pub name: String,
    #[serde(rename = "@Title")]
    pub title: String,
    #[serde(rename = "@Group")]
    pub group: String,
    #[serde(rename = "@Status")]
    pub status: String,
    #[serde(rename = "@DefaultCurrency")]
    pub default_currency: String,
    #[serde(rename = "@StoreId")]
    pub store_id: u64,
    #[serde(rename = "@IsDemoStore")]
    pub is_demo_store: bool,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct SelectStore {
    #[serde(rename = "@StoreId")]
    pub store_id: u64,
    #[serde(rename = "@CatalogId")]
    pub catalog_id: u64,
    #[serde(rename = "@EWalletCategoryId")]
    pub e_wallet_category_id: u64,
    #[serde(rename = "@VirtualCurrency")]
    pub virtual_currency: String,
    #[serde(rename = "@LockboxUrl")]
    pub lockbox_url: String,
    #[serde(rename = "@SuccessUrl")]
    pub success_url: String,
    #[serde(rename = "@FailedUrl")]
    pub failed_url: String,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct GetCatalogResponse {
    #[serde(rename = "Catalog", default)]
    pub catalogs: Vec<Catalog>,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct GetStoreResponse {
    #[serde(rename = "Store", default)]
    pub stores: Vec<Store>,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct GetWalletBalanceResponse {
    #[serde(rename = "@Balance")]
    pub balance: i64,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Offer {
    #[serde(rename = "@Type")]
    pub r#type: String,
    #[serde(rename = "@OfferId")]
    pub offer_id: String,
    #[serde(rename = "@Name")]
    pub name: String,
    #[serde(rename = "@Description")]
    pub description: String,
    #[serde(rename = "@ImageId")]
    pub image_id: String,
    #[serde(rename = "@GameDistributionSub")]
    pub game_distribution_sub_type: String,
    #[serde(rename = "@bIsOwned")]
    pub b_is_owned: bool,
    #[serde(rename = "@bHidden")]
    pub b_hidden: bool,
    #[serde(rename = "@bCanPurchase")]
    pub b_can_purchase: bool,
    #[serde(rename = "@PurchaseDate")]
    pub purchase_date: String,
    #[serde(rename = "@DownloadDate")]
    pub download_date: String,
    #[serde(rename = "@PlayableDate")]
    pub playable_date: String,
    #[serde(rename = "@UseEndDate")]
    pub use_end_date: String,
    #[serde(rename = "@DownloadSize")]
    pub download_size: u64,
    #[serde(rename = "@Currency")]
    pub currency: String,
    #[serde(rename = "@bIsDiscounted")]
    pub b_is_discounted: bool,
    #[serde(rename = "@Price")]
    pub price: f64,
    #[serde(rename = "@LocalizedPrice")]
    pub localized_price: String,
    #[serde(rename = "@OriginalPrice")]
    pub original_price: f64,
    #[serde(rename = "@LocalizedOriginalPrice")]
    pub localized_original_price: String,
    #[serde(rename = "@InventoryCap")]
    pub inventory_cap: i32,
    #[serde(rename = "@InventorySold")]
    pub inventory_sold: i32,
    #[serde(rename = "@InventoryAvailable")]
    pub inventory_available: i32,
    #[serde(rename = "Entitlements", default)]
    pub entitlements: Vec<Entitlement>,
}

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

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryCategories {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "FilterCategories", default)]
    pub filter_categories: Vec<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryCategoriesResponse {
    #[serde(rename = "Categories", default)]
    pub categories: Vec<Category>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryOffers {
    #[serde(rename = "@UserId")]
    pub user_id: u64,
    #[serde(rename = "FilterCategories", default)]
    pub filter_categories: Vec<String>,
    #[serde(rename = "FilterMasterTitleIds", default)]
    pub filter_master_title_ids: Vec<String>,
    #[serde(rename = "FilterOffers", default)]
    pub filter_offers: Vec<String>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QueryOffersResponse {
    #[serde(rename = "Offer", default)]
    pub offers: Vec<Offer>,
}