snapcast_control/protocol/
result.rs1use serde::{Deserialize, Serialize};
2
3use super::request::RequestMethod;
4use crate::{client, group, server, stream};
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8#[serde(untagged)]
9pub enum SnapcastResult {
10 #[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 #[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 #[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 #[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 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 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 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 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}