blob: e6e6b33a0047079c2f44de9f6e222fdd5b8bf0eb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
use std::io::{self, Cursor, Write};
use azalea_buf::{AzBuf, BufReadError};
use azalea_chat::FormattedText;
use azalea_protocol_macros::ClientboundLoginPacket;
use serde::{Deserialize, Serialize};
use tracing::trace;
#[derive(ClientboundLoginPacket, Clone, Debug, PartialEq)]
pub struct ClientboundLoginDisconnect {
pub reason: FormattedText,
}
impl AzBuf for ClientboundLoginDisconnect {
fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<ClientboundLoginDisconnect, BufReadError> {
let disconnect_string = String::azalea_read(buf)?;
trace!("Got disconnect packet with string: {disconnect_string:?}");
let disconnect_json =
match serde_json::from_str::<serde_json::Value>(disconnect_string.as_str()) {
Ok(json) => json,
Err(err) => {
return Err(BufReadError::Custom(format!(
"Failed to deserialize disconnect JSON {disconnect_string:?}: {err}"
)));
}
};
Ok(ClientboundLoginDisconnect {
reason: FormattedText::deserialize(disconnect_json)?,
})
}
fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> {
let status_string = FormattedText::serialize(&self.reason, serde_json::value::Serializer)
.unwrap()
.to_string();
status_string.azalea_write(buf)?;
Ok(())
}
}
|