feat: member fetching with roles (#299)

This commit is contained in:
ToastXC
2024-02-06 21:20:35 +08:00
committed by GitHub
parent c451e431cd
commit 41ef76ff3e
9 changed files with 147 additions and 17 deletions

View File

@@ -1,8 +1,13 @@
use std::collections::HashMap;
use iso8601_timestamp::Timestamp;
use serde::{Deserialize, Serialize};
use crate::models::attachment::File;
use super::server::Role;
/// Composite primary key consisting of server and user id
#[derive(Serialize, Deserialize, JsonSchema, Debug, Clone, Default)]
pub struct MemberCompositeKey {
@@ -41,6 +46,50 @@ pub struct Member {
pub timeout: Option<Timestamp>,
}
/// 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]
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 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)]
pub enum MemberResponse {
Members(Member),
MembersWithRoles(MemberWithRoles),
}
impl From<Member> for MemberResponse {
fn from(value: Member) -> Self {
Self::Members(value)
}
}
impl From<MemberWithRoles> for MemberResponse {
fn from(value: MemberWithRoles) -> Self {
Self::MembersWithRoles(value)
}
}
/// Optional fields on server member object
#[derive(Serialize, Deserialize, JsonSchema, Debug, PartialEq, Eq, Clone)]
pub enum FieldsMember {