use serde::{Deserialize, Serialize};
use time::Duration;
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct MediaStatus {
#[serde(rename = "mediaState")]
pub state: MediaState,
#[serde(
rename = "mediaDuration",
with = "crate::serde::duration_millis::option"
)]
pub duration: Option<Duration>,
#[serde(rename = "mediaCursor", with = "crate::serde::duration_millis::option")]
pub cursor: Option<Duration>,
}
#[derive(
Clone, Copy, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize,
)]
#[non_exhaustive]
pub enum MediaState {
#[default]
#[serde(rename = "OBS_MEDIA_STATE_NONE")]
None,
#[serde(rename = "OBS_MEDIA_STATE_PLAYING")]
Playing,
#[serde(rename = "OBS_MEDIA_STATE_OPENING")]
Opening,
#[serde(rename = "OBS_MEDIA_STATE_BUFFERING")]
Buffering,
#[serde(rename = "OBS_MEDIA_STATE_PAUSED")]
Paused,
#[serde(rename = "OBS_MEDIA_STATE_STOPPED")]
Stopped,
#[serde(rename = "OBS_MEDIA_STATE_ENDED")]
Ended,
#[serde(rename = "OBS_MEDIA_STATE_ERROR")]
Error,
#[serde(other)]
Unknown,
}