feat: add pronouns to user and server members field (#811)

Signed-off-by: İspik <ispik@ispik.dev>
This commit is contained in:
İspik
2026-06-21 10:55:23 +03:00
committed by GitHub
parent d27917b824
commit ffab2369ab
10 changed files with 54 additions and 0 deletions

View File

@@ -28,6 +28,9 @@ auto_derived_partial!(
/// Member's nickname
#[serde(skip_serializing_if = "Option::is_none")]
pub nickname: Option<String>,
/// Member's pronouns
#[serde(skip_serializing_if = "Option::is_none")]
pub pronouns: Option<String>,
/// Avatar attachment
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<File>,
@@ -65,6 +68,7 @@ auto_derived!(
/// Optional fields on server member object
pub enum FieldsMember {
Nickname,
Pronouns,
Avatar,
Roles,
Timeout,
@@ -88,6 +92,7 @@ impl Default for Member {
id: Default::default(),
joined_at: Timestamp::now_utc(),
nickname: None,
pronouns: None,
avatar: None,
roles: vec![],
timeout: None,
@@ -231,6 +236,7 @@ impl Member {
FieldsMember::JoinedAt => {}
FieldsMember::Avatar => self.avatar = None,
FieldsMember::Nickname => self.nickname = None,
FieldsMember::Pronouns => self.pronouns = None,
FieldsMember::Roles => self.roles.clear(),
FieldsMember::Timeout => self.timeout = None,
FieldsMember::CanReceive => self.can_receive = true,

View File

@@ -345,6 +345,7 @@ impl IntoDocumentPath for FieldsMember {
FieldsMember::JoinedAt => Some("joined_at"),
FieldsMember::Avatar => Some("avatar"),
FieldsMember::Nickname => Some("nickname"),
FieldsMember::Pronouns => Some("pronouns"),
FieldsMember::Roles => Some("roles"),
FieldsMember::Timeout => Some("timeout"),
FieldsMember::CanPublish => Some("can_publish"),

View File

@@ -31,6 +31,9 @@ auto_derived_partial!(
/// Display name
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
/// User's pronouns
#[serde(skip_serializing_if = "Option::is_none", default)]
pub pronouns: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
/// Avatar attachment
pub avatar: Option<File>,
@@ -76,6 +79,7 @@ auto_derived!(
ProfileContent,
ProfileBackground,
DisplayName,
Pronouns,
// internal fields
Suspension,
@@ -182,6 +186,7 @@ impl Default for User {
username: Default::default(),
discriminator: Default::default(),
display_name: Default::default(),
pronouns: Default::default(),
avatar: Default::default(),
relations: Default::default(),
badges: Default::default(),
@@ -706,6 +711,7 @@ impl User {
}
}
FieldsUser::DisplayName => self.display_name = None,
FieldsUser::Pronouns => self.pronouns = None,
FieldsUser::Suspension => self.suspended_until = None,
FieldsUser::None => {}
}

View File

@@ -336,6 +336,7 @@ impl IntoDocumentPath for FieldsUser {
FieldsUser::StatusPresence => "status.presence",
FieldsUser::StatusText => "status.text",
FieldsUser::DisplayName => "display_name",
FieldsUser::Pronouns => "pronouns",
FieldsUser::Suspension => "suspended_until",
FieldsUser::None => "none",
})

View File

@@ -631,6 +631,7 @@ impl From<crate::Member> for Member {
id: value.id.into(),
joined_at: value.joined_at,
nickname: value.nickname,
pronouns: value.pronouns,
avatar: value.avatar.map(|f| f.into()),
roles: value.roles,
timeout: value.timeout,
@@ -646,6 +647,7 @@ impl From<Member> for crate::Member {
id: value.id.into(),
joined_at: value.joined_at,
nickname: value.nickname,
pronouns: value.pronouns,
avatar: value.avatar.map(|f| f.into()),
roles: value.roles,
timeout: value.timeout,
@@ -661,6 +663,7 @@ impl From<crate::PartialMember> for PartialMember {
id: value.id.map(|id| id.into()),
joined_at: value.joined_at,
nickname: value.nickname,
pronouns: value.pronouns,
avatar: value.avatar.map(|f| f.into()),
roles: value.roles,
timeout: value.timeout,
@@ -676,6 +679,7 @@ impl From<PartialMember> for crate::PartialMember {
id: value.id.map(|id| id.into()),
joined_at: value.joined_at,
nickname: value.nickname,
pronouns: value.pronouns,
avatar: value.avatar.map(|f| f.into()),
roles: value.roles,
timeout: value.timeout,
@@ -708,6 +712,7 @@ impl From<crate::FieldsMember> for FieldsMember {
match value {
crate::FieldsMember::Avatar => FieldsMember::Avatar,
crate::FieldsMember::Nickname => FieldsMember::Nickname,
crate::FieldsMember::Pronouns => FieldsMember::Pronouns,
crate::FieldsMember::Roles => FieldsMember::Roles,
crate::FieldsMember::Timeout => FieldsMember::Timeout,
crate::FieldsMember::CanReceive => FieldsMember::CanReceive,
@@ -723,6 +728,7 @@ impl From<FieldsMember> for crate::FieldsMember {
match value {
FieldsMember::Avatar => crate::FieldsMember::Avatar,
FieldsMember::Nickname => crate::FieldsMember::Nickname,
FieldsMember::Pronouns => crate::FieldsMember::Pronouns,
FieldsMember::Roles => crate::FieldsMember::Roles,
FieldsMember::Timeout => crate::FieldsMember::Timeout,
FieldsMember::CanReceive => crate::FieldsMember::CanReceive,
@@ -1032,6 +1038,7 @@ impl crate::User {
username: self.username,
discriminator: self.discriminator,
display_name: self.display_name,
pronouns: self.pronouns,
avatar: self.avatar.map(|file| file.into()),
relations: if let Some(crate::User { id, .. }) = perspective {
if id == &self.id {
@@ -1108,6 +1115,7 @@ impl crate::User {
username: self.username,
discriminator: self.discriminator,
display_name: self.display_name,
pronouns: self.pronouns,
avatar: self.avatar.map(|file| file.into()),
relations: vec![],
badges,
@@ -1141,6 +1149,7 @@ impl crate::User {
username: self.username,
discriminator: self.discriminator,
display_name: self.display_name,
pronouns: self.pronouns,
avatar: self.avatar.map(|file| file.into()),
relations: vec![],
badges,
@@ -1168,6 +1177,7 @@ impl crate::User {
username: self.username,
discriminator: self.discriminator,
display_name: self.display_name,
pronouns: self.pronouns,
avatar: self.avatar.map(|file| file.into()),
relations: self
.relations
@@ -1211,6 +1221,7 @@ impl From<User> for crate::User {
username: value.username,
discriminator: value.discriminator,
display_name: value.display_name,
pronouns: value.pronouns,
avatar: value.avatar.map(Into::into),
relations: None,
badges: Some(value.badges as i32),
@@ -1231,6 +1242,7 @@ impl From<crate::PartialUser> for PartialUser {
username: value.username,
discriminator: value.discriminator,
display_name: value.display_name,
pronouns: value.pronouns,
avatar: value.avatar.map(|file| file.into()),
relations: value.relations.map(|relationships| {
relationships
@@ -1259,6 +1271,7 @@ impl From<FieldsUser> for crate::FieldsUser {
FieldsUser::StatusPresence => crate::FieldsUser::StatusPresence,
FieldsUser::StatusText => crate::FieldsUser::StatusText,
FieldsUser::DisplayName => crate::FieldsUser::DisplayName,
FieldsUser::Pronouns => crate::FieldsUser::Pronouns,
FieldsUser::Internal => crate::FieldsUser::None,
}
@@ -1274,6 +1287,7 @@ impl From<crate::FieldsUser> for FieldsUser {
crate::FieldsUser::StatusPresence => FieldsUser::StatusPresence,
crate::FieldsUser::StatusText => FieldsUser::StatusText,
crate::FieldsUser::DisplayName => FieldsUser::DisplayName,
crate::FieldsUser::Pronouns => FieldsUser::Pronouns,
crate::FieldsUser::Suspension => FieldsUser::Internal,
crate::FieldsUser::None => FieldsUser::Internal,