azalea_inventory/components/
profile.rs1use azalea_auth::game_profile::{
2 GameProfile, GameProfileProperties, SerializableProfileProperties,
3};
4use azalea_buf::AzBuf;
5use azalea_core::codec_utils::*;
6use azalea_registry::identifier::Identifier;
7use serde::{Serialize, Serializer};
8use uuid::Uuid;
9
10#[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)]
11#[doc(alias = "ResolvableProfile")]
12pub struct Profile {
13 #[serde(flatten)]
14 pub unpack: Box<PartialOrFullProfile>,
15 #[serde(flatten)]
16 pub skin_patch: Box<PlayerSkinPatch>,
17}
18
19#[derive(AzBuf, Clone, Debug, PartialEq, Serialize)]
20#[serde(untagged)]
21pub enum PartialOrFullProfile {
22 Partial(PartialProfile),
23 Full(GameProfile),
24}
25impl Default for PartialOrFullProfile {
26 fn default() -> Self {
27 Self::Partial(PartialProfile::default())
28 }
29}
30
31#[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)]
32pub struct PartialProfile {
33 #[limit(16)]
34 #[serde(skip_serializing_if = "is_default")]
35 pub name: Option<String>,
36 #[serde(skip_serializing_if = "is_default")]
37 pub id: Option<Uuid>,
38 #[serde(serialize_with = "serialize_properties")]
39 #[serde(skip_serializing_if = "is_default")]
40 pub properties: GameProfileProperties,
41}
42fn serialize_properties<S: Serializer>(
43 properties: &GameProfileProperties,
44 serializer: S,
45) -> Result<S::Ok, S::Error> {
46 let serializable = SerializableProfileProperties::from(properties.clone());
47 serializable.serialize(serializer)
48}
49
50#[derive(AzBuf, Clone, Debug, Default, PartialEq, Serialize)]
51pub struct PlayerSkinPatch {
52 #[serde(rename = "texture")]
53 #[serde(skip_serializing_if = "is_default")]
54 pub body: Option<ResourceTexture>,
55 #[serde(skip_serializing_if = "is_default")]
56 pub cape: Option<ResourceTexture>,
57 #[serde(skip_serializing_if = "is_default")]
58 pub elytra: Option<ResourceTexture>,
59 #[serde(skip_serializing_if = "is_default")]
60 pub model: Option<PlayerModelType>,
61}
62
63#[derive(AzBuf, Clone, Copy, Debug, Default, PartialEq, Serialize)]
64#[serde(rename_all = "snake_case")]
65pub enum PlayerModelType {
66 #[default]
67 Wide,
68 Slim,
69}
70
71#[derive(AzBuf, Clone, Debug, PartialEq, Serialize)]
72#[serde(transparent)]
73pub struct ResourceTexture {
74 pub id: Identifier,
75}