From 3b93fc641250c4d01ab7f0764b7d5faec2f8ae5b Mon Sep 17 00:00:00 2001 From: EightFactorial Date: Sat, 3 Dec 2022 17:08:05 -0800 Subject: Serialize Component (#47) * Serializing ClientboundStatusResponsePacket Enable serialization of ClientboundStatusResponsePacket * Update clientbound_status_response_packet.rs Add options previewsChat and enforcesSecureChat * Serialize Style and TextColor * Serialize BaseComponent * Serialize TextComponent * Fix Style * Serialize Component * Fix multiple formats per message, fix reset tag * Fix Style, again * Use FlatMapSerializer * Forgot italics * Count struct fields, reorganize logic * Serialize TranslatableComponent * Rewrite TextComponent Serializer * Fix using TextColor::Parse * Code Cleanup * Add default attribute, just in case * Clippy * use serde derive feature + preferred formatting choices Co-authored-by: BuildTools Co-authored-by: mat --- .../status/clientbound_status_response_packet.rs | 32 ++++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'azalea-protocol/src/packets') diff --git a/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs b/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs index 64ea14f9..efa6080c 100755 --- a/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs +++ b/azalea-protocol/src/packets/status/clientbound_status_response_packet.rs @@ -1,23 +1,23 @@ use azalea_buf::{BufReadError, McBufReadable, McBufWritable}; use azalea_chat::Component; use azalea_protocol_macros::ClientboundStatusPacket; -use serde::Deserialize; -use serde_json::Value; +use serde::{Deserialize, Serialize}; +use serde_json::{value::Serializer, Value}; use std::io::{Cursor, Write}; -#[derive(Clone, Debug, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct Version { - pub name: Component, + pub name: String, pub protocol: i32, } -#[derive(Clone, Debug, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct SamplePlayer { pub id: String, pub name: String, } -#[derive(Clone, Debug, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct Players { pub max: i32, pub online: i32, @@ -26,12 +26,22 @@ pub struct Players { } // the entire packet is just json, which is why it has deserialize -#[derive(Clone, Debug, Deserialize, ClientboundStatusPacket)] +#[derive(Clone, Debug, Serialize, Deserialize, ClientboundStatusPacket)] pub struct ClientboundStatusResponsePacket { pub description: Component, + #[serde(default)] + #[serde(skip_serializing_if = "Option::is_none")] pub favicon: Option, pub players: Players, pub version: Version, + #[serde(default)] + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "previewsChat")] + pub previews_chat: Option, + #[serde(default)] + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(rename = "enforcesSecureChat")] + pub enforces_secure_chat: Option, } impl McBufReadable for ClientboundStatusResponsePacket { @@ -44,7 +54,11 @@ impl McBufReadable for ClientboundStatusResponsePacket { } impl McBufWritable for ClientboundStatusResponsePacket { - fn write_into(&self, _buf: &mut impl Write) -> Result<(), std::io::Error> { - todo!() + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + let status_string = ClientboundStatusResponsePacket::serialize(self, Serializer) + .unwrap() + .to_string(); + status_string.write_into(buf)?; + Ok(()) } } -- cgit v1.2.3