// 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, }