Skip to main content

hypixel/models/
guild.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use super::common::{JsonObject, millis};
6
7/// A guild, as returned by `guild`.
8#[derive(Debug, Clone, Deserialize, Serialize)]
9pub struct Guild {
10    #[serde(rename = "_id", default)]
11    pub id: String,
12    #[serde(default)]
13    pub name: Option<String>,
14    #[serde(default)]
15    pub description: Option<String>,
16    #[serde(default)]
17    pub tag: Option<String>,
18    #[serde(rename = "tagColor", default)]
19    pub tag_color: Option<String>,
20    #[serde(default)]
21    pub exp: Option<i64>,
22    #[serde(rename = "created", default, with = "millis::option")]
23    pub created: Option<DateTime<Utc>>,
24    #[serde(default)]
25    pub members: Vec<GuildMember>,
26    #[serde(default)]
27    pub ranks: Vec<Value>,
28    #[serde(rename = "preferredGames", default)]
29    pub preferred_games: Vec<String>,
30    #[serde(flatten)]
31    pub extra: JsonObject,
32}
33
34/// A single member entry within a [`Guild`].
35#[derive(Debug, Clone, Deserialize, Serialize)]
36pub struct GuildMember {
37    #[serde(default)]
38    pub uuid: String,
39    #[serde(default)]
40    pub rank: Option<String>,
41    #[serde(default, with = "millis::option")]
42    pub joined: Option<DateTime<Utc>>,
43    #[serde(rename = "questParticipation", default)]
44    pub quest_participation: Option<i64>,
45    #[serde(rename = "expHistory", default)]
46    pub exp_history: JsonObject,
47    #[serde(flatten)]
48    pub extra: JsonObject,
49}
50
51#[derive(Debug, Clone, Deserialize)]
52pub(crate) struct GuildResponse {
53    pub guild: Option<Guild>,
54}