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