azalea_protocol/packets/status/
c_status_response.rs

1use std::io::{Cursor, Write};
2
3use azalea_buf::{AzaleaRead, AzaleaWrite, BufReadError};
4use azalea_chat::FormattedText;
5use azalea_protocol_macros::ClientboundStatusPacket;
6use serde::{Deserialize, Serialize};
7use serde_json::value::Serializer;
8
9#[derive(Clone, Debug, Serialize, Deserialize)]
10pub struct Version {
11    pub name: String,
12    pub protocol: i32,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize)]
16pub struct SamplePlayer {
17    pub id: String,
18    pub name: String,
19}
20
21#[derive(Clone, Debug, Serialize, Deserialize)]
22pub struct Players {
23    pub max: i32,
24    pub online: i32,
25    #[serde(default)]
26    pub sample: Vec<SamplePlayer>,
27}
28
29// the entire packet is just json, which is why it has deserialize
30#[derive(Clone, Debug, Serialize, Deserialize, ClientboundStatusPacket)]
31pub struct ClientboundStatusResponse {
32    pub description: FormattedText,
33    #[serde(default)]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub favicon: Option<String>,
36    pub players: Players,
37    pub version: Version,
38    #[serde(default)]
39    #[serde(skip_serializing_if = "Option::is_none")]
40    #[serde(rename = "enforcesSecureChat")]
41    pub enforces_secure_chat: Option<bool>,
42}
43
44impl AzaleaRead for ClientboundStatusResponse {
45    fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<ClientboundStatusResponse, BufReadError> {
46        let status_string = String::azalea_read(buf)?;
47        let status_json: serde_json::Value = serde_json::from_str(status_string.as_str())?;
48
49        Ok(ClientboundStatusResponse::deserialize(status_json)?)
50    }
51}
52
53impl AzaleaWrite for ClientboundStatusResponse {
54    fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
55        let status_string = ClientboundStatusResponse::serialize(self, Serializer)
56            .unwrap()
57            .to_string();
58        status_string.azalea_write(buf)?;
59        Ok(())
60    }
61}