snapcast_control/protocol/
request.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{client, group, server, stream};
4
5/// The method of a request that the client can call
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7#[serde(tag = "method")]
8pub enum Method {
9  // client
10  #[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  // group
20  #[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  // server
32  #[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  // stream
40  #[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  // client
69  ClientGetStatus,
70  ClientSetVolume(String),
71  ClientSetLatency(String),
72  ClientSetName(String),
73
74  // group
75  GroupGetStatus,
76  GroupSetMute(String),
77  GroupSetStream(String),
78  GroupSetClients,
79  GroupSetName(String),
80
81  // server
82  ServerGetRPCVersion,
83  ServerGetStatus,
84  ServerDeleteClient,
85
86  // stream
87  StreamAddStream,
88  StreamRemoveStream,
89  StreamControl,
90  StreamSetProperty,
91}
92
93impl From<&Method> for RequestMethod {
94  fn from(method: &Method) -> Self {
95    match method {
96      // client
97      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      // group
103      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      // server
110      Method::ServerGetRPCVersion => Self::ServerGetRPCVersion,
111      Method::ServerGetStatus => Self::ServerGetStatus,
112      Method::ServerDeleteClient { .. } => Self::ServerDeleteClient,
113
114      // stream
115      Method::StreamAddStream { .. } => Self::StreamAddStream,
116      Method::StreamRemoveStream { .. } => Self::StreamRemoveStream,
117      Method::StreamControl { .. } => Self::StreamControl,
118      Method::StreamSetProperty { .. } => Self::StreamSetProperty,
119    }
120  }
121}