fume_core/user/
get_player_summaries.rs1use 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}