use serde::{Deserialize, Serialize};
use serde_json::{from_value, Value};
use crate::{
errors::{ErrorHandle, SteamUserError},
macros::do_http,
steam_id::SteamId,
Steam, BASE,
};
use super::INTERFACE;
const ENDPOINT: &str = "GetPlayerBans";
const VERSION: &str = "1";
#[derive(Serialize, Deserialize, Debug)]
struct Wrapper {
players: Vec<Player>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Player {
#[serde(rename = "SteamId")]
pub steam_id: String,
#[serde(rename = "CommunityBanned")]
pub community_banned: bool,
#[serde(rename = "VACBanned")]
pub vac_banned: bool,
#[serde(rename = "NumberOfVACBans")]
pub number_of_vac_bans: u32,
#[serde(rename = "DaysSinceLastBan")]
pub days_since_last_ban: u32,
#[serde(rename = "NumberOfGameBans")]
pub number_of_game_bans: u32,
#[serde(rename = "EconomyBan")]
pub economy_ban: String,
}
impl Steam {
pub async fn get_player_bans(
&self,
steam_ids: Vec<SteamId>,
) -> Result<Vec<Player>, SteamUserError> {
let steam_ids: String = steam_ids.iter().map(|&id| id.to_string() + ",").collect();
let query = format!("?key={}&steamids={}", &self.api_key, steam_ids);
let url = format!("{}/{}/{}/v{}/{}", BASE, INTERFACE, ENDPOINT, VERSION, query);
let json = do_http!(url, Value, ErrorHandle, SteamUserError::GetPlayerBans);
let wrapper: Wrapper =
ErrorHandle!(from_value(json.to_owned()), SteamUserError::GetPlayerBans);
Ok(wrapper.players)
}
}