mlb_api/requests/stats/wrappers/
single_matchup.rs1use chrono::{NaiveDate, Utc};
2use derive_more::{Deref, DerefMut};
3use serde::Deserialize;
4use crate::game::GameId;
5use crate::person::NamedPerson;
6use crate::season::SeasonId;
7use crate::stats::{RawStat, SingletonSplitStat};
8use crate::stats::wrappers::SeasonPiece;
9use crate::team::NamedTeam;
10
11#[derive(Debug, Deserialize, PartialEq, Eq, Clone, Deref, DerefMut)]
12#[serde(rename_all = "camelCase")]
13#[serde(bound = "T: RawStat")]
14pub struct SingleMatchup<T: RawStat> {
15 pub pitcher: NamedPerson,
16 pub batter: NamedPerson,
17
18 pub opponent: NamedTeam,
19 pub date: NaiveDate,
20 pub is_home: bool,
21 pub game: GameId,
22 pub season: SeasonId,
23
24 #[deref]
25 #[deref_mut]
26 #[serde(rename = "stat")]
27 pub stats: T,
28}
29
30impl<T: RawStat> SeasonPiece for SingleMatchup<T> {
31 fn season(&self) -> &SeasonId {
32 &self.season
33 }
34}
35
36impl<T: RawStat> Default for SingleMatchup<T> {
37 fn default() -> Self {
38 Self {
39 pitcher: NamedPerson::unknown_person(),
40 batter: NamedPerson::unknown_person(),
41
42 opponent: NamedTeam::unknown_team(),
43 date: Utc::now().date_naive(),
44 is_home: true,
45 game: GameId::new(0),
46 season: SeasonId::current_season(),
47
48 stats: T::default(),
49 }
50 }
51}
52
53impl<T: RawStat> SingletonSplitStat for SingleMatchup<T> {}