mlb_api/requests/stats/wrappers/
player_and_team.rs1use derive_more::{Deref, DerefMut};
2use serde::Deserialize;
3use crate::game_types::GameType;
4use crate::person::NamedPerson;
5use crate::season::SeasonId;
6use crate::stats::{RawStat, SingletonSplitStat};
7use crate::stats::wrappers::{GameTypePiece, PlayerPiece, SeasonPiece, TeamPiece};
8use crate::team::NamedTeam;
9
10#[derive(Debug, Deserialize, PartialEq, Eq, Clone, Deref, DerefMut)]
11#[serde(rename_all = "camelCase")]
12#[serde(bound = "T: RawStat")]
13pub struct WithPlayerAndTeam<T: RawStat> {
14 pub player: NamedPerson,
15 pub game_type: GameType,
16 pub season: SeasonId,
17
18 pub team: NamedTeam,
19
20 #[deref]
21 #[deref_mut]
22 #[serde(rename = "stat")]
23 pub stats: T,
24}
25
26impl<T: RawStat> SeasonPiece for WithPlayerAndTeam<T> {
27 fn season(&self) -> &SeasonId {
28 &self.season
29 }
30}
31
32impl<T: RawStat> PlayerPiece for WithPlayerAndTeam<T> {
33 fn player(&self) -> &NamedPerson {
34 &self.player
35 }
36}
37
38impl<T: RawStat> GameTypePiece for WithPlayerAndTeam<T> {
39 fn game_type(&self) -> &GameType {
40 &self.game_type
41 }
42}
43
44impl<T: RawStat> TeamPiece for WithPlayerAndTeam<T> {
45 fn team(&self) -> &NamedTeam {
46 &self.team
47 }
48}
49
50impl<T: RawStat> Default for WithPlayerAndTeam<T> {
51 fn default() -> Self {
52 Self {
53 player: NamedPerson::unknown_person(),
54 game_type: GameType::default(),
55 season: SeasonId::current_season(),
56 team: NamedTeam::unknown_team(),
57 stats: T::default(),
58 }
59 }
60}
61
62impl<T: RawStat> SingletonSplitStat for WithPlayerAndTeam<T> {}