forked from jmug/stoatchat
fix(delta): use untagged enum for MemberResponse
This commit is contained in:
@@ -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,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user