From 9663caa1ffd708698d10a8cea5221f432a563e5c Mon Sep 17 00:00:00 2001 From: Bob Bobs Date: Fri, 9 Feb 2024 20:06:56 -0700 Subject: [PATCH] fix(delta): use untagged enum for MemberResponse --- .../src/impl/generic/servers/server_member.rs | 22 ++---------- .../quark/src/models/servers/server_member.rs | 34 ++++--------------- 2 files changed, 9 insertions(+), 47 deletions(-) diff --git a/crates/quark/src/impl/generic/servers/server_member.rs b/crates/quark/src/impl/generic/servers/server_member.rs index 464ca5d6..b52e49ff 100644 --- a/crates/quark/src/impl/generic/servers/server_member.rs +++ b/crates/quark/src/impl/generic/servers/server_member.rs @@ -5,7 +5,6 @@ use iso8601_timestamp::Timestamp; use crate::{ events::client::EventV1, models::{ - server::Role, server_member::{FieldsMember, MemberCompositeKey, MemberWithRoles, PartialMember}, Member, Server, }, @@ -84,30 +83,13 @@ impl Member { FieldsMember::Timeout => self.timeout = None, } } - - pub fn with_roles(&self, roles: HashMap) -> MemberWithRoles { - MemberWithRoles { - id: self.id.clone(), - joined_at: self.joined_at, - nickname: self.nickname.clone(), - avatar: self.avatar.clone(), - roles, - timeout: self.timeout, - } - } } + impl MemberWithRoles { pub fn new(server_id: String, user_id: String) -> Self { Self { - id: MemberCompositeKey { - server: server_id, - user: user_id, - }, - joined_at: Timestamp::now_utc(), - nickname: None, - avatar: None, + member: Member::new(server_id, user_id), roles: HashMap::new(), - timeout: None, } } } diff --git a/crates/quark/src/models/servers/server_member.rs b/crates/quark/src/models/servers/server_member.rs index 0d340d5f..5f41aaf6 100644 --- a/crates/quark/src/models/servers/server_member.rs +++ b/crates/quark/src/models/servers/server_member.rs @@ -47,47 +47,27 @@ pub struct Member { } /// Representation of a member of a server on Revolt With Role Data -#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, OptionalStruct)] -#[optional_derive(Serialize, Deserialize, JsonSchema, Debug, Default, Clone)] -#[opt_skip_serializing_none] -#[opt_some_priority] +#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)] pub struct MemberWithRoles { - /// Unique member id - #[serde(rename = "_id")] - pub id: MemberCompositeKey, - - /// Time at which this user joined the server - pub joined_at: Timestamp, - - /// Member's nickname - #[serde(skip_serializing_if = "Option::is_none")] - pub nickname: Option, - /// Avatar attachment - #[serde(skip_serializing_if = "Option::is_none")] - pub avatar: Option, - - /// Member's roles - #[serde(skip_serializing_if = "HashMap::is_empty", default)] + pub member: Member, pub roles: HashMap, - /// Timestamp this member is timed out until - #[serde(skip_serializing_if = "Option::is_none")] - pub timeout: Option, } #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)] +#[serde(untagged)] pub enum MemberResponse { - Members(Member), - MembersWithRoles(MemberWithRoles), + Member(Member), + MemberWithRoles(MemberWithRoles), } impl From for MemberResponse { fn from(value: Member) -> Self { - Self::Members(value) + Self::Member(value) } } impl From for MemberResponse { fn from(value: MemberWithRoles) -> Self { - Self::MembersWithRoles(value) + Self::MemberWithRoles(value) } } /// Optional fields on server member object