ddcore_rs/ddinfo/
models.rs

1//
2// models for ddinfo
3//
4
5////////////////////////////////// Marker
6//////////////////////////////////
7
8#[derive(Debug, serde::Serialize)]
9pub enum OperatingSystem {
10    Windows,
11    Linux,
12}
13
14#[derive(serde::Deserialize, Debug)]
15pub struct MarkerResponse {
16    pub value: usize,
17}
18
19////////////////////////////////// Tool
20//////////////////////////////////
21
22#[derive(serde::Deserialize, Debug)]
23#[serde(rename_all = "camelCase")]
24pub struct Tool {
25    pub name: String,
26    pub display_name: String,
27    pub version_number: String,
28    pub version_number_required: String,
29    pub changelog: Vec<ChangelogEntry>,
30}
31
32#[derive(serde::Deserialize, Debug)]
33#[serde(rename_all = "camelCase")]
34pub struct ChangelogEntry {
35    pub version_number: String,
36    pub date: String,
37    pub changes: Vec<Change>,
38}
39
40#[derive(serde::Deserialize, Debug)]
41#[serde(rename_all = "camelCase")]
42pub struct Change {
43    pub description: String,
44    pub sub_changes: Option<Vec<String>>,
45}
46
47#[derive(serde::Deserialize, Debug)]
48#[serde(rename_all = "camelCase")]
49pub struct DdstatsRustIntegration {
50    pub required_version: String,
51}
52
53////////////////////////////////// Spawnsets
54//////////////////////////////////
55
56#[derive(serde::Deserialize, Debug)]
57#[serde(rename_all = "camelCase")]
58pub struct SpawnsetFile {
59    pub max_display_waves: Option<i32>,
60    pub html_description: Option<String>,
61    pub last_updated: Option<String>,
62    pub spawnset_data: SpawnsetData,
63    pub name: String,
64    pub author_name: String,
65    pub has_custom_leaderboard: bool,
66    pub is_practice: bool,
67}
68
69#[derive(serde::Deserialize, Debug)]
70#[serde(rename_all = "camelCase")]
71pub struct SpawnsetData {
72    pub spawn_version: i32,
73    pub world_version: i32,
74    pub game_mode: GameMode,
75    pub non_loop_spawn_count: i32,
76    pub non_loop_length: Option<f64>,
77    pub loop_length: Option<f64>,
78    pub hand: Option<u8>,
79    pub additional_gems: Option<f64>,
80    pub time_start: Option<f64>,
81}
82
83#[derive(serde::Deserialize, Debug)]
84pub enum GameMode {
85    Default,
86    TimeAttack,
87}
88
89#[derive(serde::Deserialize, Debug)]
90#[serde(rename_all = "camelCase")]
91pub struct SpawnsetForDdcl {
92    pub spawnset_id: i32,
93    pub name: String,
94    pub author_name: String,
95    pub custom_leaderboard: Option<SpawnsetCustomLeaderboard>
96}
97
98#[derive(serde::Deserialize, Debug)]
99#[serde(rename_all = "camelCase")]
100pub struct SpawnsetCustomLeaderboard {
101    pub custom_leaderboard_id: i32,
102    pub custom_entries: Vec<SpawnsetCustomEntry>,
103}
104
105#[derive(serde::Deserialize, Debug)]
106#[serde(rename_all = "camelCase")]
107pub struct SpawnsetCustomEntry {
108    pub custom_entry_id: i32,
109    pub time: i32,
110    pub has_replay: bool,
111}
112
113#[derive(Debug, PartialEq, Eq, PartialOrd)]
114pub enum CustomLeaderboardDagger {
115    Pleb = 0,
116    Bronze,
117    Silver,
118    Gold,
119    Devil,
120    Leviathan
121}
122
123////////////////////////////////// Leaderboards
124//////////////////////////////////
125
126#[derive(serde::Deserialize, Debug)]
127#[serde(rename_all = "camelCase")]
128pub struct Leaderboard {
129    pub date_time: String,
130    pub players: i32,
131    pub time_global: i64,
132    pub kills_global: i64,
133    pub gems_global: i64,
134    pub deaths_global: i64,
135    pub daggers_hit_global: i64,
136    pub daggers_fired_global: i64,
137    pub entries: Vec<Entry>,
138}
139
140#[derive(serde::Deserialize, Debug)]
141#[serde(rename_all = "camelCase")]
142pub struct Entry {
143    pub rank: i32,
144    pub id: i32,
145    pub username: String,
146    pub time: f64,
147    pub kills: i32,
148    pub gems: i32,
149    pub death_type: u8,
150    pub daggers_hit: i32,
151    pub daggers_fired: i32,
152    pub time_total: f64,
153    pub kills_total: i64,
154    pub gems_total: i64,
155    pub deaths_total: i64,
156    pub daggers_hit_total: i64,
157    pub daggers_fired_total: i64,
158}
159