1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use std::error::Error;
4
5#[derive(Debug, Deserialize, Serialize)]
6pub struct Player {
7 username: String,
8 id: u64,
9 ping: u16,
10}
11
12#[derive(Debug, Deserialize, Serialize)]
13pub struct Server {
14 ip: String,
15 port: u16,
16 game: String,
17 hostname: String,
18 map: String,
19 gametype: String,
20 players: Vec<Player>,
21 maxplayers: u8,
22 hardcore: bool,
23 password: bool,
24 bots: u8,
25 voice: u8,
26 description: String,
27 #[serde(rename = "codInfo")]
28 cod_info: String,
29 revision: u32,
30}
31
32pub async fn pluto_api() -> Result<HashMap<String, Vec<Server>>, Box<dyn Error>> {
33 let client = reqwest::Client::new();
34
35 let response = client
36 .get("https://plutonium.pw/api/servers")
37 .send()
38 .await?
39 .json::<Vec<Server>>()
40 .await?;
41
42 let mut servers_by_game: HashMap<String, Vec<Server>> = HashMap::new();
43
44 for server in response {
45 servers_by_game
46 .entry(server.game.clone())
47 .or_insert_with(Vec::new)
48 .push(server);
49 }
50
51 Ok(servers_by_game)
52}