From 890c899a8ba984233bd91795333f8ac178bfe8eb Mon Sep 17 00:00:00 2001 From: Guilherme Werner Date: Fri, 12 Jan 2024 15:55:50 -0300 Subject: [PATCH] Create servers.rs --- src/types/servers.rs | 82 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/types/servers.rs diff --git a/src/types/servers.rs b/src/types/servers.rs new file mode 100644 index 0000000..d35c7bc --- /dev/null +++ b/src/types/servers.rs @@ -0,0 +1,82 @@ +// Copyright (c) Tribufu. All Rights Reserved. + +use crate::users::MiniProfile; +use chrono::NaiveDateTime; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use serde_with::{serde_as, DisplayFromStr}; + +#[serde_as] +#[derive(Debug, Serialize, Deserialize)] +pub struct Server { + #[serde_as(as = "DisplayFromStr")] + pub id: u64, + pub name: String, + pub description: Option, + pub address: String, + pub game_port: Option, + pub query_port: u16, + #[serde(skip_serializing_if = "Option::is_none")] + pub rcon_port: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub rcon_password: Option, + #[serde_as(as = "DisplayFromStr")] + pub package_id: u64, + pub package_icon_url: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub package: Option, + pub version: Option, + pub cluster_id: Option, + pub website_url: Option, + pub banner_url: Option, + pub owner_id: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub owner: Option, + #[serde(skip)] + pub uptime: f64, + pub last_online: Option, + #[serde(flatten)] + pub stats: ServerStats, + pub country: Option, + pub steam: bool, + pub discord_server_id: Option, + pub youtube_video_url: Option, + pub tags: Option, + pub comment_count: u32, + #[serde(skip)] + pub secret: Option, + pub created: NaiveDateTime, + pub updated: Option, +} + +#[repr(u8)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum ServerStatus { + Unknown, + Offline, + Online, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ServerStats { + pub status: ServerStatus, + pub ping: Option, + pub map: Option, + pub used_slots: Option, + pub max_slots: Option, + pub motd: Option, + pub players: Option, +} + +#[serde_as] +#[derive(Debug, Serialize, Deserialize)] +pub struct ServerPackage { + #[serde_as(as = "DisplayFromStr")] + pub id: u64, + pub name: String, + pub slug: Option, + pub rust_gamedig_id: Option, + pub node_gamedig_id: Option, + pub server_connect_url: Option, +}