snapcast_control/protocol/
request.rs1use serde::{Deserialize, Serialize};
2
3use crate::{client, group, server, stream};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7#[serde(tag = "method")]
8pub enum Method {
9 #[serde(rename = "Client.GetStatus")]
11 ClientGetStatus { params: client::GetStatusParams },
12 #[serde(rename = "Client.SetVolume")]
13 ClientSetVolume { params: client::SetVolumeParams },
14 #[serde(rename = "Client.SetLatency")]
15 ClientSetLatency { params: client::SetLatencyParams },
16 #[serde(rename = "Client.SetName")]
17 ClientSetName { params: client::SetNameParams },
18
19 #[serde(rename = "Group.GetStatus")]
21 GroupGetStatus { params: group::GetStatusParams },
22 #[serde(rename = "Group.SetMute")]
23 GroupSetMute { params: group::SetMuteParams },
24 #[serde(rename = "Group.SetStream")]
25 GroupSetStream { params: group::SetStreamParams },
26 #[serde(rename = "Group.SetClients")]
27 GroupSetClients { params: group::SetClientsParams },
28 #[serde(rename = "Group.SetName")]
29 GroupSetName { params: group::SetNameParams },
30
31 #[serde(rename = "Server.GetRPCVersion")]
33 ServerGetRPCVersion,
34 #[serde(rename = "Server.GetStatus")]
35 ServerGetStatus,
36 #[serde(rename = "Server.DeleteClient")]
37 ServerDeleteClient { params: server::DeleteClientParams },
38
39 #[serde(rename = "Stream.AddStream")]
41 StreamAddStream { params: stream::AddStreamParams },
42 #[serde(rename = "Stream.RemoveStream")]
43 StreamRemoveStream { params: stream::RemoveStreamParams },
44 #[serde(rename = "Stream.Control")]
45 StreamControl { params: stream::ControlParams },
46 #[serde(rename = "Stream.SetProperty")]
47 StreamSetProperty { params: stream::SetPropertyParams },
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct Request {
52 pub id: uuid::Uuid,
53 pub jsonrpc: String,
54 #[serde(flatten)]
55 pub method: Method,
56}
57
58impl TryInto<String> for Request {
59 type Error = serde_json::Error;
60
61 fn try_into(self) -> Result<String, Self::Error> {
62 serde_json::to_string(&self)
63 }
64}
65
66#[derive(Clone, Debug)]
67pub enum RequestMethod {
68 ClientGetStatus,
70 ClientSetVolume(String),
71 ClientSetLatency(String),
72 ClientSetName(String),
73
74 GroupGetStatus,
76 GroupSetMute(String),
77 GroupSetStream(String),
78 GroupSetClients,
79 GroupSetName(String),
80
81 ServerGetRPCVersion,
83 ServerGetStatus,
84 ServerDeleteClient,
85
86 StreamAddStream,
88 StreamRemoveStream,
89 StreamControl,
90 StreamSetProperty,
91}
92
93impl From<&Method> for RequestMethod {
94 fn from(method: &Method) -> Self {
95 match method {
96 Method::ClientGetStatus { .. } => Self::ClientGetStatus,
98 Method::ClientSetVolume { params } => Self::ClientSetVolume(params.id.clone()),
99 Method::ClientSetLatency { params } => Self::ClientSetLatency(params.id.clone()),
100 Method::ClientSetName { params } => Self::ClientSetName(params.id.clone()),
101
102 Method::GroupGetStatus { .. } => Self::GroupGetStatus,
104 Method::GroupSetMute { params } => Self::GroupSetMute(params.id.clone()),
105 Method::GroupSetStream { params } => Self::GroupSetStream(params.id.clone()),
106 Method::GroupSetClients { .. } => Self::GroupSetClients,
107 Method::GroupSetName { params } => Self::GroupSetName(params.id.clone()),
108
109 Method::ServerGetRPCVersion => Self::ServerGetRPCVersion,
111 Method::ServerGetStatus => Self::ServerGetStatus,
112 Method::ServerDeleteClient { .. } => Self::ServerDeleteClient,
113
114 Method::StreamAddStream { .. } => Self::StreamAddStream,
116 Method::StreamRemoveStream { .. } => Self::StreamRemoveStream,
117 Method::StreamControl { .. } => Self::StreamControl,
118 Method::StreamSetProperty { .. } => Self::StreamSetProperty,
119 }
120 }
121}