minecraft_pinger/java/
model.rs1use serde::{Serialize, Deserialize};
2
3#[derive(Serialize, Deserialize)]
4pub struct JavaPing {
5 pub version: Version,
6 pub players: Players,
7 pub description: Description,
8 pub favicon: Option<String>,
9 #[serde(rename = "modinfo")]
10 pub mod_info: Option<ModInfo>,
11
12 #[serde(default)]
13 pub latency: u32,
14}
15
16#[derive(Serialize, Deserialize)]
18#[serde(untagged)]
19pub enum Description {
20 Component(TextComponent),
21 Plain(String),
22}
23
24#[derive(Serialize, Deserialize)]
25#[serde(untagged)]
26pub enum TextComponent {
27 Object {
28 #[serde(default)]
29 text: String,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
32 hat: Option<bool>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 player: Option<PlayerField>,
35 #[serde(skip_serializing_if = "Option::is_none", alias = "shadowColor")]
36 shadow_color: Option<i32>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 atlas: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 sprite: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 bold: Option<bool>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 strikethrough: Option<bool>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 obfuscated: Option<bool>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 italic: Option<bool>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 underlined: Option<bool>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 font: Option<String>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
55 color: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 extra: Option<Vec<TextComponent>>,
58 },
59 String(String),
60 Array(Vec<TextComponent>),
61}
62#[derive(Serialize, Deserialize)]
65#[serde(untagged)]
66pub enum PlayerField {
67 Name(String),
68 Full(Player),
69}
70
71#[derive(Serialize, Deserialize)]
72pub struct Player {
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub name: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub properties: Option<Vec<Property>>
77}
78
79#[derive(Serialize, Deserialize)]
80pub struct Property {
81 pub name: String,
82 pub value: String
83}
84
85#[derive(Serialize, Deserialize)]
86pub struct Version {
87 pub name: String,
88 pub protocol: Option<i32>,
89}
90
91#[derive(Serialize, Deserialize)]
92pub struct Players {
93 pub online: u32,
94 pub max: i32,
95 pub sample: Option<Vec<PlayerInfo>>,
96}
97
98#[derive(Serialize, Deserialize)]
99pub struct PlayerInfo {
100 pub name: String,
101 pub id: String,
102}
103
104#[derive(Serialize, Deserialize, Default)]
105pub struct ModInfo {
106 #[serde(rename = "type", default)]
107 pub name: String,
108 #[serde(rename = "modList", default)]
109 pub mod_list: Vec<Mod>,
110}
111
112#[derive(Serialize, Deserialize)]
113pub struct Mod {
114 #[serde(rename = "modid")]
115 pub mod_id: String,
116 pub version: String,
117}