ddapi_rs/scheme/ddnet/
map.rs

1use crate::prelude::{encode, slugify2};
2use crate::scheme::{deserialize_datetime_timestamp, serialize_datetime_timestamp, DDNET_BASE_URL};
3use chrono::NaiveDateTime;
4use serde_derive::{Deserialize, Serialize};
5
6#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
7pub struct Map {
8    pub name: String,
9    pub website: String,
10    pub thumbnail: String,
11    pub web_preview: String,
12    pub r#type: String,
13    pub points: i64,
14    pub difficulty: i64,
15    pub mapper: String,
16    pub release: Option<f64>,
17    pub median_time: f64,
18    pub first_finish: f64,
19    pub last_finish: f64,
20    pub finishes: i64,
21    pub finishers: i64,
22    pub biggest_team: i64,
23    pub width: i64,
24    pub height: i64,
25    pub tiles: Vec<String>,
26    pub team_ranks: Vec<DTeamRank>,
27    pub ranks: Vec<DRank>,
28    pub max_finishes: Vec<MaxFinish>,
29}
30
31impl Map {
32    pub fn url(&self) -> String {
33        format!(
34            "https://{}/maps/{}",
35            DDNET_BASE_URL,
36            encode(&slugify2(&self.name))
37        )
38    }
39
40    pub fn url_with_name(map: &str) -> String {
41        format!("https://{}/maps/{}", DDNET_BASE_URL, encode(&slugify2(map)))
42    }
43
44    pub fn api(map: &str) -> String {
45        format!("https://{}/maps/?json={}", DDNET_BASE_URL, encode(map))
46    }
47}
48
49#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
50pub struct DTeamRank {
51    pub rank: i64,
52    pub players: Vec<String>,
53    pub time: f64,
54    #[serde(
55        serialize_with = "serialize_datetime_timestamp",
56        deserialize_with = "deserialize_datetime_timestamp"
57    )]
58    pub timestamp: NaiveDateTime,
59    pub country: String,
60}
61
62#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
63pub struct DRank {
64    pub rank: i64,
65    pub player: String,
66    pub time: f64,
67    #[serde(
68        serialize_with = "serialize_datetime_timestamp",
69        deserialize_with = "deserialize_datetime_timestamp"
70    )]
71    pub timestamp: NaiveDateTime,
72    pub country: String,
73}
74
75#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
76pub struct MaxFinish {
77    pub rank: i64,
78    pub player: String,
79    pub num: i64,
80    pub time: f64,
81    #[serde(
82        serialize_with = "serialize_datetime_timestamp",
83        deserialize_with = "deserialize_datetime_timestamp"
84    )]
85    pub min_timestamp: NaiveDateTime,
86    #[serde(
87        serialize_with = "serialize_datetime_timestamp",
88        deserialize_with = "deserialize_datetime_timestamp"
89    )]
90    pub max_timestamp: NaiveDateTime,
91}