Skip to main content

fume_core/user/
get_player_summaries.rs

1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3
4use crate::{
5    Api, Param, Response,
6    app::AppId,
7    user::{GroupId, SteamId},
8};
9
10use super::INTERFACE;
11
12#[derive(Clone, Debug)]
13pub struct SteamIds(pub Vec<SteamId>);
14
15impl Param for SteamIds {
16    fn name() -> &'static str {
17        "steamids"
18    }
19
20    fn value(&self) -> String {
21        let values: Vec<String> = self.0.iter().map(|val| val.value()).collect();
22        values.join(",")
23    }
24}
25
26#[derive(Clone, Debug)]
27pub struct GetPlayerSummaries {
28    pub steamids: SteamIds,
29}
30
31impl GetPlayerSummaries {
32    pub const METHOD: &str = "GetPlayerSummaries";
33    pub const VERSION: &str = "v2";
34}
35
36impl Api for GetPlayerSummaries {
37    fn interface() -> &'static str {
38        INTERFACE
39    }
40
41    fn method() -> &'static str {
42        Self::METHOD
43    }
44
45    fn version() -> &'static str {
46        Self::VERSION
47    }
48
49    type Response = Response<PlayerSummaries>;
50
51    fn parameters(&self) -> impl Iterator<Item = (&str, String)> {
52        std::iter::once(self.steamids.param())
53    }
54}
55
56#[derive(Clone, Debug, Deserialize, Serialize)]
57#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))]
58pub struct PlayerSummaries {
59    pub players: Vec<PlayerSummary>,
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
63#[cfg_attr(feature = "deny-unknown-fields", serde(deny_unknown_fields))]
64pub struct PlayerSummary {
65    pub steamid: SteamId,
66    #[serde(rename = "communityvisibilitystate")]
67    pub community_visibility_state: ProfileVisibility,
68    #[serde(rename = "profilestate")]
69    pub profile_state: Option<ProfileState>,
70    #[serde(rename = "personaname")]
71    pub persona_name: String,
72    #[serde(rename = "profileurl")]
73    pub profile_url: String,
74    pub avatar: String,
75    #[serde(rename = "avatarmedium")]
76    pub avatar_medium: String,
77    #[serde(rename = "avatarfull")]
78    pub avatar_full: String,
79    #[serde(rename = "avatarhash")]
80    pub avatar_hash: String,
81    #[serde(rename = "lastlogoff")]
82    pub last_logoff: Option<u64>,
83    #[serde(rename = "personastate")]
84    pub persona_state: PersonaState,
85    #[serde(rename = "primaryclanid")]
86    pub primary_clan_id: Option<GroupId>,
87    #[serde(rename = "timecreated")]
88    pub time_created: Option<u64>,
89    #[serde(rename = "personastateflags")]
90    pub persona_state_flags: Option<u8>,
91    #[serde(rename = "gameid")]
92    pub game_id: Option<AppId>,
93    #[serde(rename = "gameserverip")]
94    pub game_server_ip: Option<String>,
95    #[serde(rename = "gameextrainfo")]
96    pub game_extra_info: Option<String>,
97    #[serde(rename = "commentpermission")]
98    pub comment_permission: Option<u8>,
99    #[serde(rename = "realname")]
100    pub real_name: Option<String>,
101    #[serde(rename = "loccityid")]
102    pub loc_city_id: Option<u64>,
103    #[serde(rename = "loccountrycode")]
104    pub loc_country_code: Option<String>,
105    #[serde(rename = "locstatecode")]
106    pub loc_state_code: Option<String>,
107}
108
109#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
110#[repr(u8)]
111pub enum PersonaState {
112    Offline = 0,
113    Online = 1,
114    Busy = 2,
115    Away = 3,
116    Snooze = 4,
117    LookingToTrade = 5,
118    LookingToPlay = 6,
119}
120
121#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
122#[repr(u8)]
123pub enum ProfileVisibility {
124    Private = 1,
125    FriendsOnly = 2,
126    Public = 3,
127}
128
129#[derive(Clone, Debug, Deserialize_repr, Serialize_repr)]
130#[repr(u8)]
131pub enum ProfileState {
132    Unconfigured = 0,
133    Configured = 1,
134}