Skip to main content

mlb_api/requests/stats/wrappers/
player_and_team.rs

1use 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> {}