rs_pixel/response/
guild_response.rs

1use crate::types::game_type::GameType;
2use serde::{Deserialize, Deserializer, Serialize};
3use std::collections::HashMap;
4
5#[derive(Serialize, Deserialize, Debug)]
6pub struct GuildResponse {
7    pub success: bool,
8    pub guild: Option<Guild>,
9}
10
11#[derive(Serialize, Deserialize, Debug)]
12pub struct Guild {
13    #[serde(rename = "_id")]
14    pub id: String,
15    pub created: i64,
16    pub exp: i64,
17    #[serde(rename = "publiclyListed", default = "Default::default")]
18    pub publicly_listed: bool,
19    #[serde(default = "Default::default")]
20    pub joinable: bool,
21    pub name: String,
22    #[serde(default = "Default::default")]
23    pub description: String,
24    pub tag: String,
25    #[serde(rename = "tagColor")]
26    pub tag_color: String,
27    // pub banner: Banner,
28    pub members: Vec<Member>,
29    pub ranks: Vec<Rank>,
30    #[serde(rename = "preferredGames")]
31    pub preferred_games: Vec<GameType>,
32    #[serde(rename = "guildExpByGameType")]
33    pub guild_exp_by_game_type: HashMap<GameType, i64>,
34    pub achievements: HashMap<GuildAchievement, i64>,
35    pub coins: i64,
36    #[serde(rename = "coinsEver")]
37    pub coins_ever: i64,
38    #[serde(rename = "legacyRanking")]
39    pub legacy_ranking: Option<i64>,
40}
41
42#[derive(Serialize, Deserialize, Debug)]
43pub struct Member {
44    pub uuid: String,
45    pub rank: String,
46    pub joined: i64,
47    #[serde(rename = "expHistory")]
48    pub exp_history: HashMap<String, i64>,
49}
50
51#[derive(Serialize, Deserialize, Debug)]
52pub struct Rank {
53    pub name: String,
54    #[serde(deserialize_with = "deserialize_null_default")]
55    pub tag: String,
56    pub priority: i64,
57    pub default: bool,
58    pub created: i64,
59}
60
61#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Hash)]
62#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
63pub enum GuildAchievement {
64    ExperienceKings,
65    OnlinePlayers,
66    Prestige,
67    Winners,
68}
69
70fn deserialize_null_default<'de, D, T>(deserializer: D) -> Result<T, D::Error>
71where
72    T: Default + Deserialize<'de>,
73    D: Deserializer<'de>,
74{
75    let opt = Option::deserialize(deserializer)?;
76    Ok(opt.unwrap_or_default())
77}