rlstats/
model.rs

1use serde::{Deserialize, Serialize};
2use std::collections::BTreeMap;
3
4/// A possible json error.
5///
6/// See http://documentation.rocketleaguestats.com/#response-codes
7#[derive(Debug, Deserialize)]
8pub struct ResponseCode {
9    pub code: i32,
10    pub message: String,
11}
12
13/// A platform that RocketLeague supports.
14#[derive(Clone, Debug, Deserialize)]
15pub struct Platform {
16    /// Some known IDs:
17    ///
18    /// * 1 is Steam
19    /// * 2 is PS4
20    /// * 3 is XboxOne
21    pub id: i32,
22    pub name: String,
23}
24
25/// A RocketLeague season.
26#[derive(Debug, Deserialize)]
27pub struct Season {
28    /// 1, 2, 3, 4 and onwards.
29    #[serde(rename = "seasonId")]
30    pub season_id: i64,
31    /// This is a unix timestamp.
32    #[serde(rename = "startedOn")]
33    pub started_on: i64,
34    /// This is a unix timestamp.
35    ///
36    /// This field will be `None` if the season has not yet ended.
37    #[serde(rename = "endedOn")]
38    pub ended_on: Option<i64>,
39}
40
41/// Population of a `Playlist`.
42#[derive(Debug, Deserialize)]
43pub struct Population {
44    /// Number of players currently playing the playlist.
45    pub players: i32,
46    /// This is a unix timestamp.
47    #[serde(rename = "updatedAt")]
48    pub updated_at: i64,
49}
50
51/// A RocketLeague playlist.
52#[derive(Debug, Deserialize)]
53pub struct Playlist {
54    pub id: i32,
55    /// See the `Platform` struct.
56    #[serde(rename = "platformId")]
57    pub platform_id: i32,
58    pub name: String,
59    pub population: Population,
60}
61
62/// A RocketLeague ranked tier.
63#[derive(Debug, Deserialize)]
64pub struct Tier {
65    /// Increments for every tier and sub-tier.
66    ///
67    /// Example:
68    ///
69    /// ```no-run
70    /// [
71    ///     Tier {
72    ///         id: 0,
73    ///         name: "Unranked"
74    ///     },
75    ///     Tier {
76    ///         id: 1,
77    ///         name: "Bronze I"
78    ///     },
79    ///     Tier {
80    ///         id: 2,
81    ///         name: "Bronze II"
82    ///     },
83    ///     Tier {
84    ///         id: 3,
85    ///         name: "Bronze III"
86    ///     },
87    ///     Tier {
88    ///         id: 4,
89    ///         name: "Silver I"
90    ///     },
91    ///     Tier {
92    ///         id: 5,
93    ///         name: "Silver II"
94    ///     },
95    ///     Tier {
96    ///         id: 6,
97    ///         name: "Silver III"
98    ///     },
99    ///     Tier {
100    ///         id: 7,
101    ///         name: "Gold I"
102    ///     },
103    ///     Tier {
104    ///         id: 8,
105    ///         name: "Gold II"
106    ///     },
107    ///     ...
108    /// ]
109    /// ```
110    #[serde(rename = "tierId")]
111    pub id: i32,
112    #[serde(rename = "tierName")]
113    pub name: String,
114}
115
116/// Stats about a player.
117#[derive(Debug, Deserialize)]
118pub struct Stats {
119    pub wins: i32,
120    pub goals: i32,
121    pub mvps: i32,
122    pub saves: i32,
123    pub shots: i32,
124    pub assists: i32,
125}
126
127/// Information about a season.
128#[derive(Debug, Deserialize)]
129pub struct RankedData {
130    #[serde(rename = "rankPoints")]
131    pub rank_points: Option<i32>,
132    #[serde(rename = "matchesPlayed")]
133    pub matches_played: Option<i32>,
134    pub tier: Option<i32>,
135    pub division: Option<i32>,
136}
137
138/// A RocketLeague player.
139///
140/// Players will only exist if they have scored at least one goal.
141#[derive(Debug, Deserialize)]
142pub struct Player {
143    /// Steam 64 ID / PSN Username / Xbox XUID
144    #[serde(rename = "uniqueId")]
145    pub unique_id: String,
146    #[serde(rename = "displayName")]
147    pub display_name: String,
148    pub platform: Platform,
149    pub avatar: Option<String>,
150    #[serde(rename = "profileUrl")]
151    pub profile_url: String,
152    #[serde(rename = "signatureUrl")]
153    pub signature_url: String,
154    pub stats: Stats,
155    #[serde(rename = "rankedSeasons")]
156    pub ranked_seasons: BTreeMap<String, BTreeMap<String, RankedData>>,
157    /// This is a unix timestamp.
158    #[serde(rename = "lastRequested")]
159    pub last_requested: i64,
160    /// This is a unix timestamp.
161    #[serde(rename = "createdAt")]
162    pub created_at: i64,
163    /// This is a unix timestamp.
164    #[serde(rename = "updatedAt")]
165    pub updated_at: i64,
166    /// This is a unix timestamp.
167    #[serde(rename = "nextUpdateAt")]
168    pub next_update_at: i64,
169}
170
171/// A search response.
172#[derive(Debug, Deserialize)]
173pub struct SearchResponse {
174    pub page: Option<i32>,
175    pub results: i32,
176    /// The total number of players that match the search.
177    #[serde(rename = "totalResults")]
178    pub total_results: i32,
179    #[serde(rename = "maxResultsPerPage")]
180    pub max_results_per_page: i32,
181    pub data: Vec<Player>,
182}
183
184/// A batch player.
185#[derive(Debug, Serialize)]
186pub struct BatchPlayer {
187    #[serde(rename = "uniqueId")]
188    pub id: String,
189    #[serde(rename = "platformId")]
190    pub platform_id: i32,
191}