pluto_servers/
lib.rs

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}