use serde::{Deserialize, Serialize};
use crate::{
errors::{ErrorHandle, SteamAppsError},
macros::do_http,
Steam, BASE,
};
use super::INTERFACE;
const ENDPOINT: &str = "GetServersAtAddress";
const VERSION: &str = "1";
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Server {
#[serde(rename = "addr")]
pub address: String,
#[serde(rename = "gmsindex")]
pub gms_index: i32,
pub steamid: String,
pub reject: Option<String>,
pub appid: u32,
pub gamedir: String,
pub region: i32,
pub secure: bool,
pub lan: bool,
pub gameport: u32,
pub specport: u32,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ServersResponse {
pub success: bool,
pub servers: Option<Vec<Server>>,
pub message: Option<String>,
}
#[derive(Deserialize, Serialize, Debug)]
struct Wrapper {
response: ServersResponse,
}
impl Steam {
pub async fn get_servers_at_address(address: &str) -> Result<ServersResponse, SteamAppsError> {
let url = format!(
"{}/{}/{}/v{}/?addr={}",
BASE, INTERFACE, ENDPOINT, VERSION, address
);
let wrapper = do_http!(
url,
Wrapper,
ErrorHandle,
SteamAppsError::GetServersAtAddress
);
Ok(wrapper.response)
}
}