steamworks/callbacks/
persona_state_change.rs1#![allow(clippy::unnecessary_cast)]
2
3use crate::callbacks::{CallbackDispatcher, CallbackStorage};
4use crate::steam::SteamId;
5use bitflags::bitflags;
6use steamworks_sys as sys;
7
8#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
10pub struct PersonaStateChange {
11 pub steam_id: SteamId,
12 pub change_flags: PersonaStateChangeFlags,
13}
14
15bitflags! {
16 #[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
18 pub struct PersonaStateChangeFlags: u32 {
19 const NAME = sys::EPersonaChange_k_EPersonaChangeName as u32;
20 const STATUS = sys::EPersonaChange_k_EPersonaChangeStatus as u32;
21 const COME_ONLINE = sys::EPersonaChange_k_EPersonaChangeComeOnline as u32;
22 const GONE_OFFLINE = sys::EPersonaChange_k_EPersonaChangeGoneOffline as u32;
23 const GAME_PLAYED = sys::EPersonaChange_k_EPersonaChangeGamePlayed as u32;
24 const GAME_SERVER = sys::EPersonaChange_k_EPersonaChangeGameServer as u32;
25 const AVATAR = sys::EPersonaChange_k_EPersonaChangeAvatar as u32;
26 const JOINED_SOURCE = sys::EPersonaChange_k_EPersonaChangeJoinedSource as u32;
27 const LEFT_SOURCE = sys::EPersonaChange_k_EPersonaChangeLeftSource as u32;
28 const RELATIONSHIP_CHANGED = sys::EPersonaChange_k_EPersonaChangeRelationshipChanged as u32;
29 const NAME_FIRST_SET = sys::EPersonaChange_k_EPersonaChangeNameFirstSet as u32;
30 const BROADCAST = sys::EPersonaChange_k_EPersonaChangeBroadcast as u32;
31 const NICKNAME = sys::EPersonaChange_k_EPersonaChangeNickname as u32;
32 const STEAM_LEVEL = sys::EPersonaChange_k_EPersonaChangeSteamLevel as u32;
33 const RICH_PRESENCE = sys::EPersonaChange_k_EPersonaChangeRichPresence as u32;
34 }
35}
36
37#[derive(Debug, Default)]
38pub(crate) struct PersonaStateChangeDispatcher(CallbackStorage<PersonaStateChange>);
39
40impl CallbackDispatcher for PersonaStateChangeDispatcher {
41 type RawCallbackData = sys::PersonaStateChange_t;
42 type MappedCallbackData = PersonaStateChange;
43
44 fn storage(&self) -> &CallbackStorage<PersonaStateChange> {
45 &self.0
46 }
47
48 fn map_callback_data(raw: &sys::PersonaStateChange_t) -> PersonaStateChange {
49 PersonaStateChange {
50 steam_id: raw.m_ulSteamID.into(),
51 change_flags: PersonaStateChangeFlags::from_bits_truncate(raw.m_nChangeFlags as u32),
52 }
53 }
54}