use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use super::UserSessionType;
#[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 UserStatus {
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub app_version: Option<String>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub compatibility_hash: Option<String>,
pub current_session_index: u32,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub hash_salt: Option<String>,
pub is_mobile: bool,
pub is_present: bool,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(rename = "lastPresenceTimestamp")]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub last_presence_time: Option<OffsetDateTime>,
#[cfg_attr(
feature = "borsh",
borsh(
serialize_with = "crate::util::borsh::time::optional_ser",
deserialize_with = "crate::util::borsh::time::optional_de"
)
)]
#[serde(rename = "lastStatusChange")]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
#[serde(skip_serializing_if = "Option::is_none")]
pub last_status_change_time: Option<OffsetDateTime>,
pub online_status: crate::model::OnlineStatus,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub output_device: crate::model::OutputDevice,
#[serde(rename = "publicRSAKey")]
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub public_rsa_key: Option<crate::model::RSAParametersData>,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub sessions: Vec<crate::model::UserSessionMetadata>,
pub user_id: crate::id::User,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub user_session_id: Option<crate::id::UserSession>,
#[serde(rename = "sessionType")]
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
pub user_session_type: Option<UserSessionType>,
}