use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[serde_with::serde_as]
#[derive(Debug, PartialEq, Eq, Hash, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(
feature = "api_client",
doc = "Can be gotten with
[`Neos::get_user_status`](crate::api_client::Neos::get_user_status)"
)]
pub struct UserStatus {
pub online_status: crate::OnlineStatus,
#[serde(rename = "lastStatusChange")]
#[serde(default)]
#[serde(with = "crate::util::opt_rfc3339")]
pub last_status_change_time: Option<OffsetDateTime>,
pub current_session_id: Option<crate::id::Session>,
pub current_session_access_level: crate::SessionAccessLevel,
#[serde(rename = "currentSessionHidden")]
pub is_current_session_hidden: bool,
#[serde(rename = "currentHosting")]
pub is_current_hosting: bool,
pub output_device: crate::OutputDevice,
pub compatibility_hash: Option<String>,
pub neos_version: Option<String>,
#[serde(rename = "publicRSAKey")]
pub public_rsa_key: Option<crate::RSAParametersData>,
pub is_mobile: bool,
#[serde_as(deserialize_as = "serde_with::DefaultOnNull")]
#[serde(default)]
pub active_sessions: Vec<crate::SessionInfo>,
}