1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4
5use super::common::{JsonObject, millis};
6
7#[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#[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}