snapcast_control/protocol/
result.rs

1use serde::{Deserialize, Serialize};
2
3use super::request::RequestMethod;
4use crate::{client, group, server, stream};
5
6/// The result of a Snapcast request
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8#[serde(untagged)]
9pub enum SnapcastResult {
10  // client
11  #[serde(rename = "Client.GetStatus")]
12  ClientGetStatus(client::GetStatusResult),
13  #[serde(rename = "Client.SetVolume")]
14  ClientSetVolume(String, client::SetVolumeResult),
15  #[serde(rename = "Client.SetLatency")]
16  ClientSetLatency(String, client::SetLatencyResult),
17  #[serde(rename = "Client.SetName")]
18  ClientSetName(String, client::SetNameResult),
19
20  // group
21  #[serde(rename = "Group.GetStatus")]
22  GroupGetStatus(group::GetStatusResult),
23  #[serde(rename = "Group.SetMute")]
24  GroupSetMute(String, group::SetMuteResult),
25  #[serde(rename = "Group.SetStream")]
26  GroupSetStream(String, group::SetStreamResult),
27  #[serde(rename = "Group.SetClients")]
28  GroupSetClients(group::SetClientsResult),
29  #[serde(rename = "Group.SetName")]
30  GroupSetName(String, group::SetNameResult),
31
32  // server
33  #[serde(rename = "Server.GetRPCVersion")]
34  ServerGetRPCVersion(server::GetRpcVersionResult),
35  #[serde(rename = "Server.GetStatus")]
36  ServerGetStatus(server::GetStatusResult),
37  #[serde(rename = "Server.DeleteClient")]
38  ServerDeleteClient(server::DeleteClientResult),
39
40  // stream
41  #[serde(rename = "Stream.AddStream")]
42  StreamAddStream(stream::AddStreamResult),
43  #[serde(rename = "Stream.RemoveStream")]
44  StreamRemoveStream(stream::RemoveStreamResult),
45  #[serde(rename = "Stream.Control")]
46  StreamControl(stream::ControlResult),
47  #[serde(rename = "Stream.SetProperty")]
48  StreamSetProperty(stream::SetPropertiesResult),
49}
50
51impl TryFrom<(RequestMethod, serde_json::Value)> for SnapcastResult {
52  type Error = serde_json::Error;
53
54  fn try_from((method, value): (RequestMethod, serde_json::Value)) -> Result<Self, Self::Error> {
55    match method {
56      // client
57      RequestMethod::ClientGetStatus => Ok(SnapcastResult::ClientGetStatus(serde_json::from_value(value)?)),
58      RequestMethod::ClientSetVolume(id) => Ok(SnapcastResult::ClientSetVolume(id, serde_json::from_value(value)?)),
59      RequestMethod::ClientSetLatency(id) => Ok(SnapcastResult::ClientSetLatency(id, serde_json::from_value(value)?)),
60      RequestMethod::ClientSetName(id) => Ok(SnapcastResult::ClientSetName(id, serde_json::from_value(value)?)),
61
62      // group
63      RequestMethod::GroupGetStatus => Ok(SnapcastResult::GroupGetStatus(serde_json::from_value(value)?)),
64      RequestMethod::GroupSetMute(id) => Ok(SnapcastResult::GroupSetMute(id, serde_json::from_value(value)?)),
65      RequestMethod::GroupSetStream(id) => Ok(SnapcastResult::GroupSetStream(id, serde_json::from_value(value)?)),
66      RequestMethod::GroupSetClients => Ok(SnapcastResult::GroupSetClients(serde_json::from_value(value)?)),
67      RequestMethod::GroupSetName(id) => Ok(SnapcastResult::GroupSetName(id, serde_json::from_value(value)?)),
68
69      // server
70      RequestMethod::ServerGetRPCVersion => Ok(SnapcastResult::ServerGetRPCVersion(serde_json::from_value(value)?)),
71      RequestMethod::ServerGetStatus => Ok(SnapcastResult::ServerGetStatus(serde_json::from_value(value)?)),
72      RequestMethod::ServerDeleteClient => Ok(SnapcastResult::ServerDeleteClient(serde_json::from_value(value)?)),
73
74      // stream
75      RequestMethod::StreamAddStream => Ok(SnapcastResult::StreamAddStream(serde_json::from_value(value)?)),
76      RequestMethod::StreamRemoveStream => Ok(SnapcastResult::StreamRemoveStream(serde_json::from_value(value)?)),
77      RequestMethod::StreamControl => Ok(SnapcastResult::StreamControl(serde_json::from_value(value)?)),
78      RequestMethod::StreamSetProperty => Ok(SnapcastResult::StreamSetProperty(serde_json::from_value(value)?)),
79    }
80  }
81}