diff options
Diffstat (limited to 'azalea-chat/src/translatable_component.rs')
| -rwxr-xr-x | azalea-chat/src/translatable_component.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/azalea-chat/src/translatable_component.rs b/azalea-chat/src/translatable_component.rs index 28725c44..7819d5ff 100755 --- a/azalea-chat/src/translatable_component.rs +++ b/azalea-chat/src/translatable_component.rs @@ -3,8 +3,10 @@ use std::fmt::{self, Display, Formatter}; use crate::{ base_component::BaseComponent, style::Style, text_component::TextComponent, Component, }; +use serde::{ser::SerializeMap, Serialize, Serializer, __private::ser::FlatMapSerializer}; -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Serialize)] +#[serde(untagged)] pub enum StringOrComponent { String(String), Component(Component), @@ -18,6 +20,19 @@ pub struct TranslatableComponent { pub args: Vec<StringOrComponent>, } +impl Serialize for TranslatableComponent { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + let mut state = serializer.serialize_map(None)?; + state.serialize_entry("translate", &self.key)?; + Serialize::serialize(&self.base, FlatMapSerializer(&mut state))?; + state.serialize_entry("with", &self.args)?; + state.end() + } +} + impl TranslatableComponent { pub fn new(key: String, args: Vec<StringOrComponent>) -> Self { Self { |
