lol_game_client_api/
model.rs

1//! Module containing all the structures that can be deserialized from the `https://127.0.0.1:2999/liveclientdata/` endpoint.
2use serde::Deserialize;
3
4#[derive(Deserialize, Debug, Clone, PartialEq)]
5#[serde(rename_all = "camelCase")]
6pub struct AllGameData {
7    pub active_player: ActivePlayer,
8    pub all_players: Vec<Player>,
9    pub events: Events,
10    pub game_data: GameData,
11}
12
13#[derive(Deserialize, Debug, Clone, PartialEq)]
14#[serde(rename_all = "camelCase")]
15pub struct ActivePlayer {
16    pub abilities: Abilities,
17    pub champion_stats: ChampionStats,
18    pub current_gold: f64,
19    pub full_runes: FullRunes,
20    pub level: usize,
21    pub summoner_name: String,
22}
23
24#[derive(Deserialize, Debug, Clone, PartialEq)]
25#[serde(rename_all = "camelCase")]
26pub struct Player {
27    pub champion_name: String,
28    pub is_bot: bool,
29    pub is_dead: bool,
30    pub items: Vec<Item>,
31    pub level: usize,
32    pub position: String, // Enum ?
33    pub raw_champion_name: String,
34    pub respawn_timer: f64,
35    pub runes: PartialRunes,
36    pub scores: Scores,
37    #[serde(rename = "skinID")]
38    pub skin_id: usize,
39    pub summoner_name: String,
40    pub summoner_spells: SummonerSpells,
41    pub team: Team,
42}
43
44// TODO
45#[derive(Deserialize, Debug, Clone, PartialEq)]
46#[serde(rename_all = "camelCase")]
47pub struct Item {}
48
49#[derive(Deserialize, Debug, Clone, PartialEq)]
50#[serde(rename_all = "camelCase")]
51pub struct Scores {
52    pub assists: usize,
53    pub creep_score: usize,
54    pub deaths: usize,
55    pub kills: usize,
56    pub ward_score: f64,
57}
58
59#[derive(Deserialize, Debug, Clone, PartialEq)]
60#[serde(rename_all = "camelCase")]
61pub struct SummonerSpells {
62    pub summoner_spell_one: SummonerSpell,
63    pub summoner_spell_two: SummonerSpell,
64}
65
66#[derive(Deserialize, Debug, Clone, PartialEq)]
67#[serde(rename_all = "camelCase")]
68pub struct SummonerSpell {
69    pub display_name: String,
70    pub raw_description: String,
71    pub raw_display_name: String,
72}
73
74#[derive(Deserialize, Debug, Clone, PartialEq)]
75pub enum Team {
76    #[serde(rename = "ORDER")]
77    Order,
78    #[serde(rename = "CHAOS")]
79    Chaos,
80}
81
82#[derive(Deserialize, Debug, Clone, PartialEq)]
83#[serde(rename_all = "camelCase")]
84pub struct Abilities {
85    #[serde(rename = "E")]
86    pub e: Ability,
87    #[serde(rename = "Passive")]
88    pub passive: Ability,
89    #[serde(rename = "Q")]
90    pub q: Ability,
91    #[serde(rename = "R")]
92    pub r: Ability,
93    #[serde(rename = "W")]
94    pub w: Ability,
95}
96
97#[derive(Deserialize, Debug, Clone, PartialEq)]
98#[serde(rename_all = "camelCase")]
99pub struct Ability {
100    pub ability_level: Option<u8>, // May not have a level (on passive for example)
101    pub display_name: String,
102    pub id: String,
103    pub raw_description: String,
104    pub raw_display_name: String,
105}
106
107#[derive(Deserialize, Debug, Clone, PartialEq)]
108#[serde(rename_all = "camelCase")]
109pub struct ChampionStats {
110    pub ability_power: f64, // May not have a level (on passive for example)
111    pub armor: f64,
112    pub armor_penetration_flat: f64,
113    pub attack_damage: f64,
114    pub attack_range: f64,
115    pub attack_speed: f64,
116    pub bonus_armor_penetration_percent: f64,
117    pub bonus_magic_penetration_percent: f64,
118    pub crit_chance: f64,
119    pub crit_damage: f64,
120    pub current_health: f64,
121    pub heal_shield_power: Option<f64>, // Optional because not in docs, but appears to be here anyway
122    pub health_regen_rate: f64,
123    pub life_steal: f64,
124    pub magic_lethality: f64,
125    pub magic_penetration_flat: f64,
126    pub magic_penetration_percent: f64,
127    pub magic_resist: f64,
128    pub max_health: f64,
129    pub move_speed: f64,
130    pub omnivamp: Option<f64>, // Optional because not in docs, but appears to be here anyway
131    pub physical_lethality: f64,
132    pub physical_vamp: Option<f64>, // Optional because not in docs, but appears to be here anyway
133    pub resource_max: f64,
134    pub resource_regen_rate: f64,
135    pub resource_type: String, // Could be an enum I guess
136    pub resource_value: f64,
137    pub spell_vamp: f64,
138    pub tenacity: f64,
139}
140
141/// Runes for the active player
142#[derive(Deserialize, Debug, Clone, PartialEq)]
143#[serde(rename_all = "camelCase")]
144pub struct FullRunes {
145    pub general_runes: Vec<Rune>,
146    pub keystone: Rune,
147    pub primary_rune_tree: RuneTree,
148    pub secondary_rune_tree: RuneTree,
149    pub stat_runes: [StatRunes; 3],
150}
151
152/// Runes for all the other players
153#[derive(Deserialize, Debug, Clone, PartialEq)]
154#[serde(rename_all = "camelCase")]
155pub struct PartialRunes {
156    pub keystone: Rune,
157    pub primary_rune_tree: RuneTree,
158    pub secondary_rune_tree: RuneTree,
159}
160
161#[derive(Deserialize, Debug, Clone, PartialEq)]
162#[serde(rename_all = "camelCase")]
163pub struct Rune {
164    pub display_name: String,
165    pub id: u16,
166    pub raw_description: String,
167    pub raw_display_name: String,
168}
169
170#[derive(Deserialize, Debug, Clone, PartialEq)]
171#[serde(rename_all = "camelCase")]
172pub struct RuneTree {
173    pub display_name: String,
174    pub id: u16,
175    pub raw_description: String,
176    pub raw_display_name: String,
177}
178
179#[derive(Deserialize, Debug, Clone, PartialEq)]
180#[serde(rename_all = "camelCase")]
181pub struct StatRunes {
182    pub id: u16,
183    pub raw_description: String,
184}
185
186#[derive(Deserialize, Debug, Clone, PartialEq)]
187#[serde(rename_all = "camelCase")]
188pub struct GameData {
189    pub game_mode: GameMode,
190    pub game_time: f64,
191    pub map_name: String,
192    pub map_number: usize,
193    pub map_terrain: String, // enum ?
194}
195
196#[derive(Deserialize, Debug, Clone, PartialEq)]
197pub enum GameMode {
198    #[serde(rename = "CLASSIC")]
199    Classic,
200    #[serde(rename = "ARAM")]
201    Aram,
202}
203
204#[derive(Deserialize, Debug, Clone, PartialEq)]
205#[serde(tag = "EventName")]
206pub enum Event {
207    GameStart(GameStart),
208    GameEnd(GameEnd),
209    MinionsSpawning(MinionsSpawning),
210    FirstBrick(FirstBrick),
211    FirstBlood(FirstBlood),
212    TurretKilled(TurretKilled),
213    InhibKilled(InhibKilled),
214    InhibRespawningSoon(InhibRespawningSoon),
215    InhibRespawned(InhibRespawned),
216    DragonKill(DragonKill),
217    HeraldKill(HeraldKill),
218    BaronKill(BaronKill),
219    ChampionKill(ChampionKill),
220    Multikill(Multikill),
221    Ace(Ace),
222}
223
224#[derive(Deserialize, Debug, Clone, PartialEq)]
225pub struct GameStart {
226    #[serde(rename = "EventID")]
227    pub event_id: usize,
228    #[serde(rename = "EventTime")]
229    pub event_time: f64, // TODO: time in seconds, but since when ? (GameStart is not at 0,00000)
230}
231
232#[derive(Deserialize, Debug, Clone, PartialEq)]
233pub struct GameEnd {
234    #[serde(rename = "EventID")]
235    pub event_id: usize,
236    #[serde(rename = "EventTime")]
237    pub event_time: f64,
238    #[serde(rename = "Result")]
239    pub result: GameResult,
240}
241
242#[derive(Deserialize, Debug, Clone, PartialEq)]
243pub enum GameResult {
244    Win,
245    Loss,
246}
247
248#[derive(Deserialize, Debug, Clone, PartialEq)]
249pub struct MinionsSpawning {
250    #[serde(rename = "EventID")]
251    pub event_id: usize,
252    #[serde(rename = "EventTime")]
253    pub event_time: f64,
254}
255
256#[derive(Deserialize, Debug, Clone, PartialEq)]
257pub struct TurretKilled {
258    #[serde(rename = "EventID")]
259    pub event_id: usize,
260    #[serde(rename = "EventTime")]
261    pub event_time: f64,
262    #[serde(rename = "KillerName")]
263    pub killer_name: String,
264    #[serde(rename = "TurretKilled")]
265    pub turret_killed: String,
266    #[serde(rename = "Assisters")]
267    pub assisters: Vec<String>,
268}
269
270#[derive(Deserialize, Debug, Clone, PartialEq)]
271pub struct InhibKilled {
272    #[serde(rename = "EventID")]
273    pub event_id: usize,
274    #[serde(rename = "EventTime")]
275    pub event_time: f64,
276    #[serde(rename = "KillerName")]
277    pub killer_name: String,
278    #[serde(rename = "InhibKilled")]
279    pub inhib_killed: String,
280    #[serde(rename = "Assisters")]
281    pub assisters: Vec<String>,
282}
283
284#[derive(Deserialize, Debug, Clone, PartialEq)]
285pub struct InhibRespawningSoon {
286    #[serde(rename = "EventID")]
287    pub event_id: usize,
288    #[serde(rename = "EventTime")]
289    pub event_time: f64,
290    #[serde(rename = "InhibRespawningSoon")]
291    pub inhib_respawning_soon: String,
292}
293
294#[derive(Deserialize, Debug, Clone, PartialEq)]
295pub struct InhibRespawned {
296    #[serde(rename = "EventID")]
297    pub event_id: usize,
298    #[serde(rename = "EventTime")]
299    pub event_time: f64,
300    #[serde(rename = "InhibRespawned")]
301    pub inhib_respawned: String,
302}
303
304#[derive(Deserialize, Debug, Clone, PartialEq)]
305pub struct DragonKill {
306    #[serde(rename = "EventID")]
307    pub event_id: usize,
308    #[serde(rename = "EventTime")]
309    pub event_time: f64,
310    #[serde(rename = "KillerName")]
311    pub killer_name: String,
312    #[serde(rename = "Assisters")]
313    pub assisters: Vec<String>,
314    #[serde(rename = "DragonType")]
315    pub dragon_type: DragonType,
316    #[serde(rename = "Stolen")]
317    pub stolen: String,
318}
319
320#[derive(Deserialize, Debug, Clone, PartialEq)]
321pub struct FirstBrick {
322    #[serde(rename = "EventID")]
323    pub event_id: usize,
324    #[serde(rename = "EventTime")]
325    pub event_time: f64,
326    #[serde(rename = "KillerName")]
327    pub killer_name: String,
328}
329
330#[derive(Deserialize, Debug, Clone, PartialEq)]
331pub struct FirstBlood {
332    #[serde(rename = "EventID")]
333    pub event_id: usize,
334    #[serde(rename = "EventTime")]
335    pub event_time: f64,
336    #[serde(rename = "Recipient")]
337    pub recipient: String,
338}
339
340#[derive(Deserialize, Debug, Clone, PartialEq)]
341pub struct HeraldKill {
342    #[serde(rename = "EventID")]
343    pub event_id: usize,
344    #[serde(rename = "EventTime")]
345    pub event_time: f64,
346    #[serde(rename = "KillerName")]
347    pub killer_name: String,
348    #[serde(rename = "Assisters")]
349    pub assisters: Vec<String>,
350    #[serde(rename = "Stolen")]
351    pub stolen: String,
352}
353
354#[derive(Deserialize, Debug, Clone, PartialEq)]
355pub struct Ace {
356    #[serde(rename = "EventID")]
357    pub event_id: usize,
358    #[serde(rename = "EventTime")]
359    pub event_time: f64,
360    #[serde(rename = "Acer")]
361    pub acer: String,
362    #[serde(rename = "AcingTeam")]
363    pub acing_team: Team,
364}
365
366#[derive(Deserialize, Debug, Clone, PartialEq)]
367pub struct Multikill {
368    #[serde(rename = "EventID")]
369    pub event_id: usize,
370    #[serde(rename = "EventTime")]
371    pub event_time: f64,
372    #[serde(rename = "KillerName")]
373    pub killer_name: String,
374    #[serde(rename = "KillStreak")]
375    pub kill_streak: u8,
376}
377
378#[derive(Deserialize, Debug, Clone, PartialEq)]
379pub struct ChampionKill {
380    #[serde(rename = "EventID")]
381    pub event_id: usize,
382    #[serde(rename = "EventTime")]
383    pub event_time: f64,
384    #[serde(rename = "KillerName")]
385    pub killer_name: String,
386    #[serde(rename = "VictimName")]
387    pub victim_name: String,
388    #[serde(rename = "Assisters")]
389    pub assisters: Vec<String>,
390}
391
392#[derive(Deserialize, Debug, Clone, PartialEq)]
393pub struct BaronKill {
394    #[serde(rename = "EventID")]
395    pub event_id: usize,
396    #[serde(rename = "EventTime")]
397    pub event_time: f64,
398    #[serde(rename = "KillerName")]
399    pub killer_name: String,
400    #[serde(rename = "Assisters")]
401    pub assisters: Vec<String>,
402    #[serde(rename = "Stolen")]
403    pub stolen: String,
404}
405
406#[derive(Deserialize, Debug, Clone, PartialEq)]
407pub enum DragonType {
408    Elder,
409    Earth,
410    Cloud,
411    Fire,
412    Water,
413    Hextech,
414    Chemtech,
415}
416
417#[derive(Deserialize, Debug, Clone, PartialEq)]
418pub struct Events {
419    #[serde(rename = "Events")]
420    pub events: Vec<Event>,
421}