aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/packets/status
diff options
context:
space:
mode:
authorEightFactorial <murphkev000@gmail.com>2022-12-03 17:08:05 -0800
committerGitHub <noreply@github.com>2022-12-03 19:08:05 -0600
commit3b93fc641250c4d01ab7f0764b7d5faec2f8ae5b (patch)
tree727b94c9f90bba59f8571ecebeab1a33e0f4af07 /azalea-protocol/src/packets/status
parent661c3622bebc111a1523bc80792dc90d9d571b24 (diff)
downloadazalea-drasl-3b93fc641250c4d01ab7f0764b7d5faec2f8ae5b.tar.xz
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 <unconfigured@null.spigotmc.org> Co-authored-by: mat <github@matdoes.dev>
Diffstat (limited to 'azalea-protocol/src/packets/status')
-rwxr-xr-xazalea-protocol/src/packets/status/clientbound_status_response_packet.rs32
1 files changed, 23 insertions, 9 deletions
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<String>,
pub players: Players,
pub version: Version,
+ #[serde(default)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ #[serde(rename = "previewsChat")]
+ pub previews_chat: Option<bool>,
+ #[serde(default)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ #[serde(rename = "enforcesSecureChat")]
+ pub enforces_secure_chat: Option<bool>,
}
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(())
}
}