Skip to main content

cast_sender/namespace/
receiver.rs

1use crate::{app::AppId, App, Payload, Volume};
2
3#[derive(Serialize, Deserialize, Clone, Debug)]
4#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
5#[serde(tag = "type")]
6pub enum Receiver {
7    // Request
8    GetStatus,
9    Launch(LaunchRequest),
10    SetVolume(SetVolumeRequest),
11    Stop(StopRequest),
12    LaunchError(LaunchErrorResponse),
13
14    // Response
15    ReceiverStatus(ReceiverStatusResponse),
16}
17
18impl Receiver {
19    pub fn set_volume_request(level: f64, muted: bool) -> Self {
20        Self::SetVolume(SetVolumeRequest {
21            volume: Volume {
22                control_type: None,
23                muted: Some(muted),
24                level: Some(level),
25            },
26        })
27    }
28
29    pub fn launch_request(app_id: AppId) -> Self {
30        Self::Launch(LaunchRequest {
31            app_id: app_id.to_string(),
32        })
33    }
34
35    pub fn stop_request(session_id: String) -> Self {
36        Self::Stop(StopRequest { session_id })
37    }
38}
39
40impl From<Receiver> for Payload {
41    fn from(val: Receiver) -> Self {
42        Payload::Receiver(val.clone())
43    }
44}
45
46#[derive(Serialize, Deserialize, Clone, Debug, Default)]
47#[serde(rename_all = "camelCase")]
48pub struct LaunchRequest {
49    pub app_id: String,
50}
51
52#[derive(Serialize, Deserialize, Clone, Debug, Default)]
53#[serde(rename_all = "camelCase")]
54pub struct StopRequest {
55    pub session_id: String,
56}
57
58#[derive(Serialize, Deserialize, Clone, Debug, Default)]
59#[serde(rename_all = "camelCase")]
60pub struct SetVolumeRequest {
61    pub volume: Volume,
62}
63
64#[derive(Serialize, Deserialize, Clone, Debug, Default)]
65#[serde(rename_all = "camelCase")]
66pub struct ReceiverStatusResponse {
67    pub status: Status,
68}
69
70#[derive(Serialize, Deserialize, Clone, Debug, Default)]
71#[serde(rename_all = "camelCase")]
72pub struct LaunchErrorResponse {
73    pub reason: String,
74}
75
76#[derive(Serialize, Deserialize, Clone, Debug, Default)]
77#[serde(rename_all = "camelCase")]
78pub struct Status {
79    pub applications: Option<Vec<App>>,
80    pub is_active_input: Option<bool>,
81    pub is_standby: Option<bool>,
82    pub volume: Volume,
83}