use azalea_auth::game_profile::{ GameProfile, GameProfileProperties, SerializableProfileProperties, }; use azalea_buf::AzBuf; use azalea_core::codec_utils::*; use azalea_registry::identifier::Identifier; use serde::{Serialize, Serializer}; use uuid::Uuid; #[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)] #[doc(alias = "ResolvableProfile")] pub struct Profile { #[serde(flatten)] pub unpack: Box, #[serde(flatten)] pub skin_patch: Box, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] #[serde(untagged)] pub enum PartialOrFullProfile { Partial(PartialProfile), Full(GameProfile), } impl Default for PartialOrFullProfile { fn default() -> Self { Self::Partial(PartialProfile::default()) } } #[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)] pub struct PartialProfile { #[limit(16)] #[serde(skip_serializing_if = "is_default")] pub name: Option, #[serde(skip_serializing_if = "is_default")] pub id: Option, #[serde(serialize_with = "serialize_properties")] #[serde(skip_serializing_if = "is_default")] pub properties: GameProfileProperties, } fn serialize_properties( properties: &GameProfileProperties, serializer: S, ) -> Result { let serializable = SerializableProfileProperties::from(properties.clone()); serializable.serialize(serializer) } #[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)] pub struct PlayerSkinPatch { #[serde(rename = "texture")] #[serde(skip_serializing_if = "is_default")] pub body: Option, #[serde(skip_serializing_if = "is_default")] pub cape: Option, #[serde(skip_serializing_if = "is_default")] pub elytra: Option, #[serde(skip_serializing_if = "is_default")] pub model: Option, } #[derive(AzBuf, Clone, Copy, Debug, Default, PartialEq, Serialize)] #[serde(rename_all = "snake_case")] pub enum PlayerModelType { #[default] Wide, Slim, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] #[serde(transparent)] pub struct ResourceTexture { pub id: Identifier, }