fix(delta): use untagged enum for MemberResponse

This commit is contained in:
Bob Bobs
2024-02-09 20:06:56 -07:00
committed by Paul Makles
parent f9f0f409a8
commit 9663caa1ff
2 changed files with 9 additions and 47 deletions

View File

@@ -5,7 +5,6 @@ use iso8601_timestamp::Timestamp;
use crate::{ use crate::{
events::client::EventV1, events::client::EventV1,
models::{ models::{
server::Role,
server_member::{FieldsMember, MemberCompositeKey, MemberWithRoles, PartialMember}, server_member::{FieldsMember, MemberCompositeKey, MemberWithRoles, PartialMember},
Member, Server, Member, Server,
}, },
@@ -84,30 +83,13 @@ impl Member {
FieldsMember::Timeout => self.timeout = None, FieldsMember::Timeout => self.timeout = None,
} }
} }
}
pub fn with_roles(&self, roles: HashMap<String, Role>) -> 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 { impl MemberWithRoles {
pub fn new(server_id: String, user_id: String) -> Self { pub fn new(server_id: String, user_id: String) -> Self {
Self { Self {
id: MemberCompositeKey { member: Member::new(server_id, user_id),
server: server_id,
user: user_id,
},
joined_at: Timestamp::now_utc(),
nickname: None,
avatar: None,
roles: HashMap::new(), roles: HashMap::new(),
timeout: None,
} }
} }
} }

View File

@@ -47,47 +47,27 @@ pub struct Member {
} }
/// Representation of a member of a server on Revolt With Role Data /// Representation of a member of a server on Revolt With Role Data
#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, OptionalStruct)] #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)]
#[optional_derive(Serialize, Deserialize, JsonSchema, Debug, Default, Clone)]
#[opt_skip_serializing_none]
#[opt_some_priority]
pub struct MemberWithRoles { pub struct MemberWithRoles {
/// Unique member id pub member: Member,
#[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<String>,
/// Avatar attachment
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<File>,
/// Member's roles
#[serde(skip_serializing_if = "HashMap::is_empty", default)]
pub roles: HashMap<String, Role>, pub roles: HashMap<String, Role>,
/// Timestamp this member is timed out until
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout: Option<Timestamp>,
} }
#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)] #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)]
#[serde(untagged)]
pub enum MemberResponse { pub enum MemberResponse {
Members(Member), Member(Member),
MembersWithRoles(MemberWithRoles), MemberWithRoles(MemberWithRoles),
} }
impl From<Member> for MemberResponse { impl From<Member> for MemberResponse {
fn from(value: Member) -> Self { fn from(value: Member) -> Self {
Self::Members(value) Self::Member(value)
} }
} }
impl From<MemberWithRoles> for MemberResponse { impl From<MemberWithRoles> for MemberResponse {
fn from(value: MemberWithRoles) -> Self { fn from(value: MemberWithRoles) -> Self {
Self::MembersWithRoles(value) Self::MemberWithRoles(value)
} }
} }
/// Optional fields on server member object /// Optional fields on server member object