cast_sender/namespace/
receiver.rs1use 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 GetStatus,
9 Launch(LaunchRequest),
10 SetVolume(SetVolumeRequest),
11 Stop(StopRequest),
12 LaunchError(LaunchErrorResponse),
13
14 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}