mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 05:26:59 +00:00
fix(delta): use untagged enum for MemberResponse
This commit is contained in:
@@ -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<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 {
|
||||
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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<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 member: Member,
|
||||
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)]
|
||||
#[serde(untagged)]
|
||||
pub enum MemberResponse {
|
||||
Members(Member),
|
||||
MembersWithRoles(MemberWithRoles),
|
||||
Member(Member),
|
||||
MemberWithRoles(MemberWithRoles),
|
||||
}
|
||||
|
||||
impl From<Member> for MemberResponse {
|
||||
fn from(value: Member) -> Self {
|
||||
Self::Members(value)
|
||||
Self::Member(value)
|
||||
}
|
||||
}
|
||||
impl From<MemberWithRoles> for MemberResponse {
|
||||
fn from(value: MemberWithRoles) -> Self {
|
||||
Self::MembersWithRoles(value)
|
||||
Self::MemberWithRoles(value)
|
||||
}
|
||||
}
|
||||
/// Optional fields on server member object
|
||||
|
||||
Reference in New Issue
Block a user