Skip to main content

mlb_api/requests/stats/wrappers/
single_matchup.rs

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