feat(core/models): implement server members model

closes #280
This commit is contained in:
Paul Makles
2023-08-01 15:00:07 +01:00
parent fec947b4c8
commit d9dd040db4
5 changed files with 78 additions and 9 deletions

8
Cargo.lock generated
View File

@@ -1613,11 +1613,12 @@ dependencies = [
[[package]]
name = "iso8601-timestamp"
version = "0.2.10"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "368d05885f276773b79b4578869a60ab91e880415d17fb2a8d193aea74188a29"
checksum = "3bd7663ae5b511b3d13c7d374dbe73b03da3da8e66b83950390173bc7c7325cc"
dependencies = [
"generic-array 0.14.5",
"schemars",
"serde",
"time 0.3.17",
]
@@ -2882,7 +2883,7 @@ dependencies = [
"authifier",
"bson",
"futures",
"iso8601-timestamp 0.2.10",
"iso8601-timestamp 0.2.11",
"log",
"mongodb",
"nanoid",
@@ -2948,6 +2949,7 @@ dependencies = [
name = "revolt-models"
version = "0.6.5"
dependencies = [
"iso8601-timestamp 0.2.11",
"revolt-permissions",
"revolt_optional_struct",
"schemars",

View File

@@ -226,6 +226,28 @@ impl From<crate::Metadata> for Metadata {
}
}
impl From<crate::Member> for Member {
fn from(value: crate::Member) -> Self {
Member {
id: value.id.into(),
joined_at: value.joined_at,
nickname: value.nickname,
avatar: value.avatar.map(|f| f.into()),
roles: value.roles,
timeout: value.timeout,
}
}
}
impl From<crate::MemberCompositeKey> for MemberCompositeKey {
fn from(value: crate::MemberCompositeKey) -> Self {
MemberCompositeKey {
server: value.server,
user: value.user,
}
}
}
impl From<crate::Server> for Server {
fn from(value: crate::Server) -> Self {
Server {

View File

@@ -3,18 +3,18 @@ name = "revolt-models"
version = "0.6.5"
edition = "2021"
license = "AGPL-3.0-or-later"
authors = [ "Paul Makles <me@insrt.uk>" ]
authors = ["Paul Makles <me@insrt.uk>"]
description = "Revolt Backend: API Models"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
serde = [ "dep:serde", "revolt-permissions/serde" ]
schemas = [ "dep:schemars", "revolt-permissions/schemas" ]
validator = [ "dep:validator" ]
partials = [ "dep:revolt_optional_struct", "serde", "schemas" ]
serde = ["dep:serde", "revolt-permissions/serde"]
schemas = ["dep:schemars", "revolt-permissions/schemas"]
validator = ["dep:validator"]
partials = ["dep:revolt_optional_struct", "serde", "schemas"]
default = [ "serde", "partials" ]
default = ["serde", "partials"]
[dependencies]
# Core
@@ -23,6 +23,7 @@ revolt-permissions = { version = "0.6.5", path = "../permissions" }
# Serialisation
revolt_optional_struct = { version = "0.2.0", optional = true }
serde = { version = "1", features = ["derive"], optional = true }
iso8601-timestamp = { version = "0.2.11", features = ["schema", "bson"] }
# Spec Generation
schemars = { version = "0.8.8", optional = true }

View File

@@ -2,6 +2,7 @@ mod bots;
mod channel_webhooks;
mod channels;
mod files;
mod server_members;
mod servers;
mod users;
@@ -9,5 +10,6 @@ pub use bots::*;
pub use channel_webhooks::*;
pub use channels::*;
pub use files::*;
pub use server_members::*;
pub use servers::*;
pub use users::*;

View File

@@ -0,0 +1,42 @@
use super::File;
use iso8601_timestamp::Timestamp;
auto_derived!(
/// Server Member
pub struct Member {
/// Unique member id
#[cfg_attr(feature = "serde", serde(rename = "_id"))]
pub id: MemberCompositeKey,
/// Time at which this user joined the server
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub joined_at: Option<Timestamp>,
/// Member's nickname
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub nickname: Option<String>,
/// Avatar attachment
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub avatar: Option<File>,
/// Member's roles
#[cfg_attr(
feature = "serde",
serde(skip_serializing_if = "Vec::is_empty", default)
)]
pub roles: Vec<String>,
/// Timestamp this member is timed out until
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
pub timeout: Option<Timestamp>,
}
/// Composite primary key consisting of server and user id
#[derive(Hash, Default)]
pub struct MemberCompositeKey {
/// Server Id
pub server: String,
/// User Id
pub user: String,
}
);