61 lines
1.7 KiB
Rust
61 lines
1.7 KiB
Rust
//! Types for the *m.presence* event.
|
|
|
|
use ruma_identifiers::{EventId, UserId};
|
|
|
|
event! {
|
|
/// Informs the client of a user's presence state change.
|
|
pub struct PresenceEvent(PresenceEventContent) {
|
|
/// The unique identifier for the event.
|
|
pub event_id: EventId
|
|
}
|
|
}
|
|
|
|
/// The payload of a `PresenceEvent`.
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
|
pub struct PresenceEventContent {
|
|
/// The current avatar URL for this user.
|
|
#[serde(skip_serializing_if="Option::is_none")]
|
|
pub avatar_url: Option<String>,
|
|
|
|
/// Whether or not the user is currently active.
|
|
pub currently_active: Option<bool>,
|
|
|
|
/// The current display name for this user.
|
|
#[serde(skip_serializing_if="Option::is_none")]
|
|
pub displayname: Option<String>,
|
|
|
|
/// The last time since this used performed some action, in milliseconds.
|
|
#[serde(skip_serializing_if="Option::is_none")]
|
|
pub last_active_ago: Option<u64>,
|
|
|
|
/// The presence state for this user.
|
|
pub presence: PresenceState,
|
|
|
|
/// The unique identifier for the user associated with this event.
|
|
pub user_id: UserId,
|
|
}
|
|
|
|
/// A description of a user's connectivity and availability for chat.
|
|
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
|
|
pub enum PresenceState {
|
|
/// Disconnected from the service.
|
|
#[serde(rename="offline")]
|
|
Offline,
|
|
|
|
/// Connected to the service.
|
|
#[serde(rename="online")]
|
|
Online,
|
|
|
|
/// Connected to the service but not available for chat.
|
|
#[serde(rename="unavailable")]
|
|
Unavailable,
|
|
}
|
|
|
|
impl_enum! {
|
|
PresenceState {
|
|
Offline => "offline",
|
|
Online => "online",
|
|
Unavailable => "unavailable",
|
|
}
|
|
}
|