steam_rs/steam_user/
get_player_summaries.rs1use serde::{Deserialize, Serialize};
4use serde_json::{from_value, Value};
5
6use crate::{
7 errors::{ErrorHandle, SteamUserError},
8 macros::do_http,
9 steam_id::{de_steamid_from_str, SteamId},
10 Steam, BASE,
11};
12
13use super::INTERFACE;
14
15const ENDPOINT: &str = "GetPlayerSummaries";
16const VERSION: &str = "0002";
17
18#[derive(Serialize, Deserialize, Debug, Clone)]
22pub struct Player {
23 #[serde(rename = "steamid")]
25 #[serde(deserialize_with = "de_steamid_from_str")]
26 pub steam_id: SteamId,
27
28 #[serde(rename = "personaname")]
30 pub persona_name: String,
31
32 #[serde(rename = "profileurl")]
34 pub profile_url: String,
35
36 pub avatar: String,
38
39 #[serde(rename = "avatarmedium")]
41 pub avatar_medium: String,
42
43 #[serde(rename = "avatarfull")]
45 pub avatar_full: String,
46
47 #[serde(rename = "avatarhash")]
49 pub avatar_hash: String,
50
51 #[serde(rename = "personastate")]
60 pub persona_state: u8,
61
62 #[serde(rename = "communityvisibilitystate")]
69 pub community_visibility_state: u8,
70
71 #[serde(rename = "profilestate")]
73 pub profile_state: Option<u8>,
74
75 #[serde(rename = "lastlogoff")]
77 pub last_logoff: Option<u64>,
78
79 #[serde(rename = "commentpermission")]
81 pub comment_permission: Option<u8>,
82
83 #[serde(rename = "realname")]
85 pub real_name: Option<String>,
86
87 #[serde(rename = "primaryclanid")]
89 pub primary_clan_id: Option<String>,
90
91 #[serde(rename = "timecreated")]
93 pub time_created: Option<u64>,
94
95 #[serde(rename = "gameid")]
97 pub game_id: Option<String>,
98
99 #[serde(rename = "gameserverip")]
102 pub game_server_ip: Option<String>,
103
104 #[serde(rename = "gameextrainfo")]
106 pub game_extra_info: Option<String>,
107
108 #[serde(rename = "loccountrycode")]
110 pub loc_country_code: Option<String>,
111
112 #[serde(rename = "locstatecode")]
114 pub loc_state_code: Option<String>,
115
116 #[serde(rename = "loccityid")]
118 pub loc_city_id: Option<u64>,
119}
120
121#[derive(Serialize, Deserialize, Debug)]
122struct PlayerSummary {
123 players: Vec<Player>,
126}
127
128#[derive(Serialize, Deserialize, Debug)]
129struct Wrapper {
130 response: PlayerSummary,
131}
132
133impl Steam {
134 pub async fn get_player_summaries(
140 &self,
141 steam_ids: Vec<SteamId>,
142 ) -> Result<Vec<Player>, SteamUserError> {
143 let steam_ids: String = steam_ids.iter().map(|&id| id.to_string() + ",").collect();
144
145 let query = format!("?key={}&steamids={}", &self.api_key, steam_ids);
146 let url = format!("{}/{}/{}/v{}/{}", BASE, INTERFACE, ENDPOINT, VERSION, query);
147
148 let json = do_http!(url, Value, ErrorHandle, SteamUserError::GetPlayerSummaries);
149 let wrapper: Wrapper = ErrorHandle!(
150 from_value(json.to_owned()),
151 SteamUserError::GetPlayerSummaries
152 );
153
154 Ok(wrapper.response.players)
155 }
156}