hypixel-sdk 0.2.0

Async client for the Hypixel Public API with typed models and SkyBlock helpers
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Value;

use super::common::{JsonObject, millis};

/// A guild, as returned by `guild`.
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Guild {
    #[serde(rename = "_id", default)]
    pub id: String,
    #[serde(default)]
    pub name: Option<String>,
    #[serde(default)]
    pub description: Option<String>,
    #[serde(default)]
    pub tag: Option<String>,
    #[serde(rename = "tagColor", default)]
    pub tag_color: Option<String>,
    #[serde(default)]
    pub exp: Option<i64>,
    #[serde(rename = "created", default, with = "millis::option")]
    pub created: Option<DateTime<Utc>>,
    #[serde(default)]
    pub members: Vec<GuildMember>,
    #[serde(default)]
    pub ranks: Vec<Value>,
    #[serde(rename = "preferredGames", default)]
    pub preferred_games: Vec<String>,
    #[serde(flatten)]
    pub extra: JsonObject,
}

/// A single member entry within a [`Guild`].
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct GuildMember {
    #[serde(default)]
    pub uuid: String,
    #[serde(default)]
    pub rank: Option<String>,
    #[serde(default, with = "millis::option")]
    pub joined: Option<DateTime<Utc>>,
    #[serde(rename = "questParticipation", default)]
    pub quest_participation: Option<i64>,
    #[serde(rename = "expHistory", default)]
    pub exp_history: JsonObject,
    #[serde(flatten)]
    pub extra: JsonObject,
}

#[derive(Debug, Clone, Deserialize)]
pub(crate) struct GuildResponse {
    pub guild: Option<Guild>,
}