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