use crate::types::{IdleReason, MediaStatus, ReceiverStatus};
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum CastEvent {
Connected,
Disconnected(Option<String>),
Reconnecting {
attempt: u32,
},
Reconnected,
HeartbeatTimeout,
ReceiverStatusChanged(ReceiverStatus),
MediaStatusChanged(MediaStatus),
MediaSessionEnded {
media_session_id: i32,
idle_reason: IdleReason,
},
RawMessage {
namespace: String,
source: String,
destination: String,
payload: String,
},
}
impl CastEvent {
pub fn as_media_status(&self) -> Option<&MediaStatus> {
match self {
CastEvent::MediaStatusChanged(s) => Some(s),
_ => None,
}
}
pub fn as_receiver_status(&self) -> Option<&ReceiverStatus> {
match self {
CastEvent::ReceiverStatusChanged(s) => Some(s),
_ => None,
}
}
pub fn is_disconnected(&self) -> bool {
matches!(self, CastEvent::Disconnected(_))
}
pub fn is_media_status(&self) -> bool {
matches!(self, CastEvent::MediaStatusChanged(_))
}
}