nwn_rs_masterlist/
lib.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
4#[serde(rename_all = "camelCase")]
5pub struct Manifest {
6  pub required: bool,
7  pub hash: String,
8}
9
10#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct Nwsync {
13  pub manifests: Vec<Manifest>,
14  pub url: String,
15}
16
17#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
18#[serde(rename_all = "camelCase")]
19pub struct Server {
20  #[serde(rename = "first_seen")]
21  pub first_seen: i64,
22  #[serde(rename = "last_advertisement")]
23  pub last_advertisement: i64,
24  #[serde(rename = "session_name")]
25  pub session_name: String,
26  #[serde(rename = "module_name")]
27  pub module_name: String,
28  #[serde(rename = "module_description")]
29  pub module_description: String,
30  pub passworded: bool,
31  #[serde(rename = "min_level")]
32  pub min_level: i64,
33  #[serde(rename = "max_level")]
34  pub max_level: i64,
35  #[serde(rename = "current_players")]
36  pub current_players: i64,
37  #[serde(rename = "max_players")]
38  pub max_players: i64,
39  pub build: String,
40  pub rev: i64,
41  pub pvp: i64,
42  pub servervault: bool,
43  pub elc: bool,
44  pub ilr: bool,
45  #[serde(rename = "one_party")]
46  pub one_party: bool,
47  #[serde(rename = "player_pause")]
48  pub player_pause: bool,
49  pub os: i64,
50  pub language: i64,
51  #[serde(rename = "game_type")]
52  pub game_type: i64,
53  pub latency: i64,
54  pub host: String,
55  pub port: i64,
56  #[serde(rename = "kx_pk")]
57  pub kx_pk: Option<String>,
58  #[serde(rename = "sign_pk")]
59  pub sign_pk: Option<String>,
60  pub nwsync: Option<Nwsync>,
61  pub connecthint: Option<String>,
62}
63
64#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct Me {
67  pub address: String,
68  pub servers: Vec<Server>,
69}
70
71pub async fn get_my_servers() -> Result<Me, reqwest::Error> {
72  let resp = reqwest::get("https://api.nwn.beamdog.net/v1/me").await?.json::<Me>().await?;
73  Ok(resp)
74}
75
76pub async fn get_servers() -> Result<Vec<Server>, reqwest::Error> {
77  let resp = reqwest::get("https://api.nwn.beamdog.net/v1/servers").await?
78                                                                   .json::<Vec<Server>>()
79                                                                   .await?;
80  Ok(resp)
81}
82
83pub async fn get_servers_by_public_key(public_key: String) -> Result<Vec<Server>, reqwest::Error> {
84  let url = format!("https://api.nwn.beamdog.net/v1/servers/{}", public_key);
85  let resp = reqwest::get(url).await?.json::<Vec<Server>>().await?;
86  Ok(resp)
87}
88
89pub async fn get_servers_by_ip_and_port(ip: String,
90                                        port: i32)
91                                        -> Result<Vec<Server>, reqwest::Error> {
92  let url = format!("https://api.nwn.beamdog.net/v1/servers/{}/{}", ip, port);
93  let resp = reqwest::get(url).await?.json::<Vec<Server>>().await?;
94  Ok(resp)
95}