use serde::{Deserialize, Serialize};
use time::{OffsetDateTime, serde::rfc3339};
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshSerialize, borsh::BorshDeserialize)
)]
#[serde_with::serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct User {
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub account_ban_expiration: Option<OffsetDateTime>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub alternate_emails: Vec<String>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub alternate_normalized_names: Vec<String>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub date_of_birth: Option<OffsetDateTime>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub email: Option<String>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::json::vec_ser",
deserialize_with = "crate::util::borsh::json::vec_de"
)
)]
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub entitlements: Vec<serde_json::Value>,
pub id: crate::id::User,
pub is_verified: bool,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub listing_ban_expiration: Option<OffsetDateTime>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::json::ser",
deserialize_with = "crate::util::borsh::json::de"
)
)]
#[serde(default)]
pub migrated_data: serde_json::Value,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub mute_ban_expiration: Option<OffsetDateTime>,
pub normalized_username: String,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub old_emails: Vec<String>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub old_usernames: Vec<String>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::json::ser",
deserialize_with = "crate::util::borsh::json::de"
)
)]
#[serde(default)]
pub patreon_data: serde_json::Value,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub profile: Option<crate::model::UserProfile>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub public_ban_expiration: Option<OffsetDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public_ban_type: Option<crate::model::PublicBanType>,
#[deprecated = "Marked as legacy"]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub quota_bytes: Option<u64>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub referrer_user_id: Option<crate::id::User>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::ser",
deserialize_with = "crate::util::borsh::time::de"
)
)]
#[serde(rename = "registrationDate")]
#[serde(with = "rfc3339")]
pub registration_time: OffsetDateTime,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub spectator_ban_expiration: Option<OffsetDateTime>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::json::vec_ser",
deserialize_with = "crate::util::borsh::json::vec_de"
)
)]
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub supporter_metadata: Vec<serde_json::Value>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub tags: Vec<String>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(rename = "uniqueDeviceIDs")]
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub unique_device_ids: Option<String>,
#[deprecated = "Marked as legacy"]
#[serde_as(deserialize_as = "serde_with::DefaultOnError")]
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub used_bytes: Option<u64>,
pub username: String,
}