mlb_api/requests/meta/
positions.rs1use derive_more::{Deref, DerefMut};
2use serde::Deserialize;
3
4id!(PositionCode { code: String });
5
6#[derive(Debug, Deserialize, Clone, Hash)]
7#[serde(rename_all = "camelCase")]
8pub struct NamedPosition {
9 pub code: PositionCode,
10 #[serde(alias = "displayName")]
11 pub name: String,
12 #[serde(rename = "type")]
13 pub r#type: String,
14 #[serde(alias = "abbrev")]
15 pub abbreviation: String,
16}
17
18impl NamedPosition {
19 #[must_use]
20 pub fn unknown_position() -> Self {
21 Self {
22 code: PositionCode::new("X"),
23 name: "Unknown".to_owned(),
24 r#type: "Unknown".to_owned(),
25 abbreviation: "X".to_owned(),
26 }
27 }
28}
29
30#[allow(clippy::struct_excessive_bools, reason = "false positive")]
31#[derive(Debug, Deserialize, Deref, DerefMut, Clone, Hash)]
32#[serde(rename_all = "camelCase")]
33pub struct Position {
34 pub short_name: String,
35 pub full_name: String,
36 pub formal_name: String,
37 #[serde(rename = "pitcher")]
38 pub is_pitcher: bool,
39 #[serde(rename = "gamePosition")]
40 pub is_game_position: bool,
41 #[serde(rename = "fielder")]
42 pub is_fielder: bool,
43 #[serde(rename = "outfield")]
44 pub is_outfield: bool,
45
46 #[deref]
47 #[deref_mut]
48 #[serde(flatten)]
49 inner: NamedPosition,
50}
51
52impl Position {
53 #[must_use]
54 pub fn unknown_position() -> Self {
55 Self {
56 short_name: "Unknown".to_owned(),
57 full_name: "Unknown".to_owned(),
58 formal_name: "Unknown".to_owned(),
59 is_pitcher: false,
60 is_game_position: false,
61 is_fielder: false,
62 is_outfield: false,
63 inner: NamedPosition::unknown_position(),
64 }
65 }
66}
67
68id_only_eq_impl!(Position, code);
69id_only_eq_impl!(NamedPosition, code);
70meta_kind_impl!("positions" => Position);
71tiered_request_entry_cache_impl!([Position, NamedPosition].code: PositionCode);
72test_impl!(Position);