1use serde_derive::Deserialize;
7use serde_derive::Serialize;
8
9#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct AllGameData {
12 active_player: ActivePlayer,
13 all_players: Box<[AllPlayer]>,
14 events: Events,
15 game_data: GameData,
16}
17
18impl AllGameData {
19 #[must_use]
20 pub fn active_player(&self) -> &ActivePlayer {
21 &self.active_player
22 }
23 #[must_use]
24 pub fn all_players(&self) -> &[AllPlayer] {
25 &self.all_players
26 }
27 #[must_use]
28 pub fn events(&self) -> &Events {
29 &self.events
30 }
31 #[must_use]
32 pub fn game_data(&self) -> &GameData {
33 &self.game_data
34 }
35}
36
37#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub struct ActivePlayer {
40 abilities: Abilities,
41 champion_stats: ChampionStats,
42 current_gold: f64,
43 full_runes: FullRunes,
44 level: i64,
45 summoner_name: String,
46}
47
48impl ActivePlayer {
49 #[must_use]
50 pub fn abilities(&self) -> &Abilities {
51 &self.abilities
52 }
53 #[must_use]
54 pub fn champion_stats(&self) -> &ChampionStats {
55 &self.champion_stats
56 }
57 #[must_use]
58 pub fn current_gold(&self) -> f64 {
59 self.current_gold
60 }
61 #[must_use]
62 pub fn full_runes(&self) -> &FullRunes {
63 &self.full_runes
64 }
65 #[must_use]
66 pub fn level(&self) -> i64 {
67 self.level
68 }
69 #[must_use]
70 pub fn summoner_name(&self) -> &str {
71 &self.summoner_name
72 }
73}
74
75#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
76#[serde(rename_all = "PascalCase")]
77pub struct Abilities {
78 passive: Passive,
79 q: Ability,
80 w: Ability,
81 e: Ability,
82 r: Ability,
83}
84
85impl Abilities {
86 #[must_use]
87 pub fn passive(&self) -> &Passive {
88 &self.passive
89 }
90 #[must_use]
91 pub fn q(&self) -> &Ability {
92 &self.q
93 }
94 #[must_use]
95 pub fn w(&self) -> &Ability {
96 &self.w
97 }
98 #[must_use]
99 pub fn e(&self) -> &Ability {
100 &self.e
101 }
102 #[must_use]
103 pub fn r(&self) -> &Ability {
104 &self.r
105 }
106}
107
108#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct Passive {
111 display_name: String,
112 id: String,
113 raw_description: String,
114 raw_display_name: String,
115}
116
117impl Passive {
118 #[must_use]
119 pub fn display_name(&self) -> &str {
120 &self.display_name
121 }
122 #[must_use]
123 pub fn id(&self) -> &str {
124 &self.id
125 }
126 #[must_use]
127 pub fn raw_description(&self) -> &str {
128 &self.raw_description
129 }
130 #[must_use]
131 pub fn raw_display_name(&self) -> &str {
132 &self.raw_display_name
133 }
134}
135
136#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
137#[serde(rename_all = "camelCase")]
138pub struct Ability {
139 ability_level: i64,
140 display_name: String,
141 id: String,
142 raw_description: String,
143 raw_display_name: String,
144}
145
146impl Ability {
147 #[must_use]
148 pub fn ability_level(&self) -> i64 {
149 self.ability_level
150 }
151 #[must_use]
152 pub fn display_name(&self) -> &str {
153 &self.display_name
154 }
155 #[must_use]
156 pub fn id(&self) -> &str {
157 &self.id
158 }
159 #[must_use]
160 pub fn raw_description(&self) -> &str {
161 &self.raw_description
162 }
163 #[must_use]
164 pub fn raw_display_name(&self) -> &str {
165 &self.raw_display_name
166 }
167}
168
169#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
170#[serde(rename_all = "camelCase")]
171pub struct ChampionStats {
172 ability_power: f64,
173 armor: f64,
174 armor_penetration_flat: f64,
175 armor_penetration_percent: f64,
176 attack_damage: f64,
177 attack_range: f64,
178 attack_speed: f64,
179 bonus_armor_penetration_percent: f64,
180 bonus_magic_penetration_percent: f64,
181 cooldown_reduction: f64,
182 crit_chance: f64,
183 crit_damage: f64,
184 current_health: f64,
185 health_regen_rate: f64,
186 life_steal: f64,
187 magic_lethality: f64,
188 magic_penetration_flat: f64,
189 magic_penetration_percent: f64,
190 magic_resist: f64,
191 max_health: f64,
192 move_speed: f64,
193 physical_lethality: f64,
194 resource_max: f64,
195 resource_regen_rate: f64,
196 resource_type: String,
197 resource_value: f64,
198 spell_vamp: f64,
199 tenacity: f64,
200}
201
202impl ChampionStats {
203 #[must_use]
204 pub fn ability_power(&self) -> f64 {
205 self.ability_power
206 }
207 #[must_use]
208 pub fn armor(&self) -> f64 {
209 self.armor
210 }
211 #[must_use]
212 pub fn armor_penetration_flat(&self) -> f64 {
213 self.armor_penetration_flat
214 }
215 #[must_use]
216 pub fn armor_penetration_percent(&self) -> f64 {
217 self.armor_penetration_percent
218 }
219 #[must_use]
220 pub fn attack_damage(&self) -> f64 {
221 self.attack_damage
222 }
223 #[must_use]
224 pub fn attack_range(&self) -> f64 {
225 self.attack_range
226 }
227 #[must_use]
228 pub fn attack_speed(&self) -> f64 {
229 self.attack_speed
230 }
231 #[must_use]
232 pub fn bonus_armor_penetration_percent(&self) -> f64 {
233 self.bonus_armor_penetration_percent
234 }
235 #[must_use]
236 pub fn bonus_magic_penetration_percent(&self) -> f64 {
237 self.bonus_magic_penetration_percent
238 }
239 #[must_use]
240 pub fn cooldown_reduction(&self) -> f64 {
241 self.cooldown_reduction
242 }
243 #[must_use]
244 pub fn crit_chance(&self) -> f64 {
245 self.crit_chance
246 }
247 #[must_use]
248 pub fn crit_damage(&self) -> f64 {
249 self.crit_damage
250 }
251 #[must_use]
252 pub fn current_health(&self) -> f64 {
253 self.current_health
254 }
255 #[must_use]
256 pub fn health_regen_rate(&self) -> f64 {
257 self.health_regen_rate
258 }
259 #[must_use]
260 pub fn life_steal(&self) -> f64 {
261 self.life_steal
262 }
263 #[must_use]
264 pub fn magic_lethality(&self) -> f64 {
265 self.magic_lethality
266 }
267 #[must_use]
268 pub fn magic_penetration_flat(&self) -> f64 {
269 self.magic_penetration_flat
270 }
271 #[must_use]
272 pub fn magic_penetration_percent(&self) -> f64 {
273 self.magic_penetration_percent
274 }
275 #[must_use]
276 pub fn magic_resist(&self) -> f64 {
277 self.magic_resist
278 }
279 #[must_use]
280 pub fn max_health(&self) -> f64 {
281 self.max_health
282 }
283 #[must_use]
284 pub fn move_speed(&self) -> f64 {
285 self.move_speed
286 }
287 #[must_use]
288 pub fn physical_lethality(&self) -> f64 {
289 self.physical_lethality
290 }
291 #[must_use]
292 pub fn resource_max(&self) -> f64 {
293 self.resource_max
294 }
295 #[must_use]
296 pub fn resource_regen_rate(&self) -> f64 {
297 self.resource_regen_rate
298 }
299 #[must_use]
300 pub fn resource_type(&self) -> &str {
301 &self.resource_type
302 }
303 #[must_use]
304 pub fn resource_value(&self) -> f64 {
305 self.resource_value
306 }
307 #[must_use]
308 pub fn spell_vamp(&self) -> f64 {
309 self.spell_vamp
310 }
311 #[must_use]
312 pub fn tenacity(&self) -> f64 {
313 self.tenacity
314 }
315}
316
317#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
318#[serde(rename_all = "camelCase")]
319pub struct FullRunes {
320 keystone: Rune,
321 primary_rune_tree: Rune,
322 secondary_rune_tree: Rune,
323 general_runes: Box<[Rune]>,
324 stat_runes: Box<[StatRune]>,
325}
326
327impl FullRunes {
328 #[must_use]
329 pub fn keystone(&self) -> &Rune {
330 &self.keystone
331 }
332 #[must_use]
333 pub fn primary_rune_tree(&self) -> &Rune {
334 &self.primary_rune_tree
335 }
336 #[must_use]
337 pub fn secondary_rune_tree(&self) -> &Rune {
338 &self.secondary_rune_tree
339 }
340 #[must_use]
341 pub fn general_runes(&self) -> &[Rune] {
342 &self.general_runes
343 }
344 #[must_use]
345 pub fn stat_runes(&self) -> &[StatRune] {
346 &self.stat_runes
347 }
348}
349
350#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
351#[serde(rename_all = "camelCase")]
352pub struct Rune {
353 display_name: String,
354 id: i64,
355 raw_description: String,
356 raw_display_name: String,
357}
358
359impl Rune {
360 #[must_use]
361 pub fn display_name(&self) -> &str {
362 &self.display_name
363 }
364 #[must_use]
365 pub fn id(&self) -> i64 {
366 self.id
367 }
368 #[must_use]
369 pub fn raw_description(&self) -> &str {
370 &self.raw_description
371 }
372 #[must_use]
373 pub fn raw_display_name(&self) -> &str {
374 &self.raw_display_name
375 }
376}
377
378#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
379#[serde(rename_all = "camelCase")]
380pub struct StatRune {
381 id: i64,
382 raw_description: String,
383}
384
385impl StatRune {
386 #[must_use]
387 pub fn id(&self) -> i64 {
388 self.id
389 }
390 #[must_use]
391 pub fn raw_description(&self) -> &str {
392 &self.raw_description
393 }
394}
395
396#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
397#[serde(rename_all = "camelCase")]
398pub struct AllPlayer {
399 champion_name: String,
400 is_bot: bool,
401 is_dead: bool,
402 items: Box<[Item]>,
403 level: i64,
404 position: String,
405 raw_champion_name: String,
406 respawn_timer: f64,
407 runes: Runes,
408 scores: Scores,
409 #[serde(rename = "skinID")]
410 skin_id: i64,
411 summoner_name: String,
412 summoner_spells: SummonerSpells,
413 team: String,
414}
415
416impl AllPlayer {
417 #[must_use]
418 pub fn champion_name(&self) -> &str {
419 &self.champion_name
420 }
421 #[must_use]
422 pub fn is_bot(&self) -> bool {
423 self.is_bot
424 }
425 #[must_use]
426 pub fn is_dead(&self) -> bool {
427 self.is_dead
428 }
429 #[must_use]
430 pub fn items(&self) -> &[Item] {
431 &self.items
432 }
433 #[must_use]
434 pub fn level(&self) -> i64 {
435 self.level
436 }
437 #[must_use]
438 pub fn position(&self) -> &str {
439 &self.position
440 }
441 #[must_use]
442 pub fn raw_champion_name(&self) -> &str {
443 &self.raw_champion_name
444 }
445 #[must_use]
446 pub fn respawn_timer(&self) -> f64 {
447 self.respawn_timer
448 }
449 #[must_use]
450 pub fn runes(&self) -> &Runes {
451 &self.runes
452 }
453 #[must_use]
454 pub fn scores(&self) -> &Scores {
455 &self.scores
456 }
457 #[must_use]
458 pub fn skin_id(&self) -> i64 {
459 self.skin_id
460 }
461 #[must_use]
462 pub fn summoner_name(&self) -> &str {
463 &self.summoner_name
464 }
465 #[must_use]
466 pub fn summoner_spells(&self) -> &SummonerSpells {
467 &self.summoner_spells
468 }
469 #[must_use]
470 pub fn team(&self) -> &str {
471 &self.team
472 }
473}
474
475#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
476#[serde(rename_all = "camelCase")]
477pub struct Runes {
478 keystone: Rune,
479 primary_rune_tree: Rune,
480 secondary_rune_tree: Rune,
481}
482
483impl Runes {
484 #[must_use]
485 pub fn keystone(&self) -> &Rune {
486 &self.keystone
487 }
488 #[must_use]
489 pub fn primary_rune_tree(&self) -> &Rune {
490 &self.primary_rune_tree
491 }
492 #[must_use]
493 pub fn secondary_rune_tree(&self) -> &Rune {
494 &self.secondary_rune_tree
495 }
496}
497
498#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
499#[serde(rename_all = "camelCase")]
500pub struct Scores {
501 assists: i64,
502 creep_score: i64,
503 deaths: i64,
504 kills: i64,
505 ward_score: f64,
506}
507
508impl Scores {
509 #[must_use]
510 pub fn assists(&self) -> i64 {
511 self.assists
512 }
513 #[must_use]
514 pub fn creep_score(&self) -> i64 {
515 self.creep_score
516 }
517 #[must_use]
518 pub fn deaths(&self) -> i64 {
519 self.deaths
520 }
521 #[must_use]
522 pub fn kills(&self) -> i64 {
523 self.kills
524 }
525 #[must_use]
526 pub fn ward_score(&self) -> f64 {
527 self.ward_score
528 }
529}
530
531#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
532#[serde(rename_all = "camelCase")]
533pub struct SummonerSpells {
534 summoner_spell_one: SummonerSpell,
535 summoner_spell_two: SummonerSpell,
536}
537
538impl SummonerSpells {
539 #[must_use]
540 pub fn summoner_spell_one(&self) -> &SummonerSpell {
541 &self.summoner_spell_one
542 }
543 #[must_use]
544 pub fn summoner_spell_two(&self) -> &SummonerSpell {
545 &self.summoner_spell_two
546 }
547}
548
549impl core::ops::Index<usize> for SummonerSpells {
550 type Output = SummonerSpell;
551
552 fn index(&self, index: usize) -> &Self::Output {
553 match index {
554 0 => self.summoner_spell_one(),
555 1 => self.summoner_spell_two(),
556 e => panic!("Index Out Of Bounds, expected 0 or 1, but found {e}!"),
557 }
558 }
559}
560
561#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
562#[serde(rename_all = "camelCase")]
563pub struct SummonerSpell {
564 pub display_name: String,
565 pub raw_description: String,
566 pub raw_display_name: String,
567}
568
569impl SummonerSpell {
570 #[must_use]
571 pub fn display_name(&self) -> &str {
572 &self.display_name
573 }
574 #[must_use]
575 pub fn raw_description(&self) -> &str {
576 &self.raw_description
577 }
578 #[must_use]
579 pub fn raw_display_name(&self) -> &str {
580 &self.raw_display_name
581 }
582}
583
584#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
585#[serde(rename_all = "camelCase")]
586pub struct Item {
587 can_use: bool,
588 consumable: bool,
589 count: i64,
590 display_name: String,
591 #[serde(rename = "itemID")]
592 item_id: i64,
593 price: i64,
594 raw_description: String,
595 raw_display_name: String,
596 slot: i64,
597}
598
599impl Item {
600 #[must_use]
601 pub fn can_use(&self) -> bool {
602 self.can_use
603 }
604 #[must_use]
605 pub fn consumable(&self) -> bool {
606 self.consumable
607 }
608 #[must_use]
609 pub fn count(&self) -> i64 {
610 self.count
611 }
612 #[must_use]
613 pub fn display_name(&self) -> &str {
614 &self.display_name
615 }
616 #[must_use]
617 pub fn item_id(&self) -> i64 {
618 self.item_id
619 }
620 #[must_use]
621 pub fn price(&self) -> i64 {
622 self.price
623 }
624 #[must_use]
625 pub fn raw_description(&self) -> &str {
626 &self.raw_description
627 }
628 #[must_use]
629 pub fn raw_display_name(&self) -> &str {
630 &self.raw_display_name
631 }
632 #[must_use]
633 pub fn slot(&self) -> i64 {
634 self.slot
635 }
636}
637
638#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
639#[serde(rename_all = "PascalCase")]
640pub struct Events {
641 events: Box<[Event]>,
642}
643
644impl Events {
645 #[must_use]
646 pub fn events(&self) -> &[Event] {
647 &self.events
648 }
649}
650
651impl core::ops::Index<usize> for Events {
652 type Output = Event;
653
654 fn index(&self, index: usize) -> &Self::Output {
655 &self.events[index]
656 }
657}
658
659#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
660#[serde(rename_all = "PascalCase")]
661pub struct Event {
662 #[serde(rename = "EventID")]
663 event_id: i64,
664 event_name: String,
665 event_time: f64,
666}
667
668impl Event {
669 #[must_use]
670 pub fn event_id(&self) -> i64 {
671 self.event_id
672 }
673 #[must_use]
674 pub fn event_name(&self) -> &str {
675 &self.event_name
676 }
677 #[must_use]
678 pub fn event_time(&self) -> f64 {
679 self.event_time
680 }
681}
682
683#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
684#[serde(rename_all = "camelCase")]
685pub struct GameData {
686 pub game_mode: String,
687 pub game_time: f64,
688 pub map_name: String,
689 pub map_number: i64,
690 pub map_terrain: String,
691}
692
693impl GameData {
694 #[must_use]
695 pub fn game_mode(&self) -> &str {
696 &self.game_mode
697 }
698 #[must_use]
699 pub fn game_time(&self) -> f64 {
700 self.game_time
701 }
702 #[must_use]
703 pub fn map_name(&self) -> &str {
704 &self.map_name
705 }
706 #[must_use]
707 pub fn map_number(&self) -> i64 {
708 self.map_number
709 }
710 #[must_use]
711 pub fn map_terrain(&self) -> &str {
712 &self.map_terrain
713 }
714}
715
716pub enum TeamID {
718 ALL,
719 UNKNOWN,
720 ORDER,
721 CHAOS,
722 NEUTRAL,
723}