Skip to main content

mlb_api/requests/stats/wrappers/
career.rs

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