plex_api/media_container/
player.rs

1use serde::Deserialize;
2use serde_plain::derive_fromstr_from_deserialize;
3use serde_with::{formats::CommaSeparator, serde_as, StringWithSeparator};
4
5#[derive(Debug, Deserialize, Clone)]
6#[cfg_attr(feature = "tests_deny_unknown_fields", serde(deny_unknown_fields))]
7pub struct ResourcesMediaContainer {
8    #[serde(rename = "Player")]
9    pub player: Player,
10    #[serde(rename = "@size")]
11    pub size: Option<u32>,
12}
13
14#[serde_as]
15#[derive(Debug, Deserialize, Clone)]
16#[cfg_attr(feature = "tests_deny_unknown_fields", serde(deny_unknown_fields))]
17pub struct Player {
18    #[serde(rename = "@machineIdentifier")]
19    pub machine_identifier: String,
20    #[serde(rename = "@product")]
21    pub product: String,
22    #[serde(rename = "@protocol")]
23    pub protocol: String,
24    #[serde(rename = "@protocolVersion")]
25    pub protocol_version: u8,
26    #[serde(rename = "@deviceClass")]
27    pub device_class: DeviceClass,
28    #[serde(rename = "@platform")]
29    pub platform: String,
30    #[serde(rename = "@platformVersion")]
31    pub platform_version: String,
32    #[serde(rename = "@title")]
33    pub title: String,
34    #[serde_as(as = "StringWithSeparator::<CommaSeparator, ProtocolCapability>")]
35    #[serde(rename = "@protocolCapabilities")]
36    pub protocol_capabilities: Vec<ProtocolCapability>,
37}
38
39#[derive(Debug, Deserialize, Clone, Copy)]
40#[serde(rename_all = "kebab-case")]
41pub enum DeviceClass {
42    Stb,
43    Phone,
44    #[cfg(not(feature = "tests_deny_unknown_fields"))]
45    #[serde(other)]
46    Unknown,
47}
48
49#[derive(Debug, Deserialize, Clone, Copy)]
50#[serde(rename_all = "kebab-case")]
51pub enum ProtocolCapability {
52    Mirror,
53    Playback,
54    #[serde(rename = "playqueues")]
55    PlayQueues,
56    ProviderPlayback,
57    Timeline,
58    #[cfg(not(feature = "tests_deny_unknown_fields"))]
59    #[serde(other)]
60    Unknown,
61}
62
63derive_fromstr_from_deserialize!(ProtocolCapability);