ddapi_rs/scheme/ddnet/
map.rs1use 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}