snapcast_control/protocol/
notification.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 Notification {
9 #[serde(rename = "Client.OnConnect")]
11 ClientOnConnect { params: Box<client::OnConnectParams> },
12 #[serde(rename = "Client.OnDisconnect")]
13 ClientOnDisconnect { params: Box<client::OnDisconnectParams> },
14 #[serde(rename = "Client.OnVolumeChanged")]
15 ClientOnVolumeChanged { params: Box<client::OnVolumeChangedParams> },
16 #[serde(rename = "Client.OnLatencyChanged")]
17 ClientOnLatencyChanged {
18 params: Box<client::OnLatencyChangedParams>,
19 },
20 #[serde(rename = "Client.OnNameChanged")]
21 ClientOnNameChanged { params: Box<client::OnNameChangedParams> },
22
23 #[serde(rename = "Group.OnMute")]
25 GroupOnMute { params: Box<group::OnMuteParams> },
26 #[serde(rename = "Group.OnStreamChanged")]
27 GroupOnStreamChanged { params: Box<group::OnStreamChangedParams> },
28 #[serde(rename = "Group.OnNameChanged")]
29 GroupOnNameChanged { params: Box<group::OnNameChangedParams> },
30
31 #[serde(rename = "Server.OnUpdate")]
33 ServerOnUpdate { params: Box<server::OnUpdateParams> },
34
35 #[serde(rename = "Stream.OnUpdate")]
37 StreamOnUpdate { params: Box<stream::OnUpdateParams> },
38 #[serde(rename = "Stream.OnProperties")]
39 StreamOnProperties { params: Box<stream::OnPropertiesParams> },
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub enum NotificationType {
44 #[serde(rename = "Client.OnConnect")]
46 ClientOnConnect,
47 #[serde(rename = "Client.OnDisconnect")]
48 ClientOnDisconnect,
49 #[serde(rename = "Client.OnVolumeChanged")]
50 ClientOnVolumeChanged,
51 #[serde(rename = "Client.OnLatencyChanged")]
52 ClientOnLatencyChanged,
53 #[serde(rename = "Client.OnNameChanged")]
54 ClientOnNameChanged,
55
56 #[serde(rename = "Group.OnMute")]
58 GroupOnMute,
59 #[serde(rename = "Group.OnStreamChanged")]
60 GroupOnStreamChanged,
61 #[serde(rename = "Group.OnNameChanged")]
62 GroupOnNameChanged,
63
64 #[serde(rename = "Server.OnUpdate")]
66 ServerOnUpdate,
67
68 #[serde(rename = "Stream.OnUpdate")]
70 StreamOnUpdate,
71 #[serde(rename = "Stream.OnProperties")]
72 StreamOnProperties,
73}
74
75pub(crate) struct NotificationMethodConverter(pub NotificationType, pub serde_json::Value);
76
77impl TryFrom<NotificationMethodConverter> for Notification {
78 type Error = serde_json::Error;
79
80 fn try_from(value: NotificationMethodConverter) -> Result<Self, Self::Error> {
81 let NotificationMethodConverter(method, params) = value;
82
83 match method {
84 NotificationType::ClientOnConnect => Ok(Notification::ClientOnConnect {
86 params: serde_json::from_value(params)?,
87 }),
88 NotificationType::ClientOnDisconnect => Ok(Notification::ClientOnDisconnect {
89 params: serde_json::from_value(params)?,
90 }),
91 NotificationType::ClientOnVolumeChanged => Ok(Notification::ClientOnVolumeChanged {
92 params: serde_json::from_value(params)?,
93 }),
94 NotificationType::ClientOnLatencyChanged => Ok(Notification::ClientOnLatencyChanged {
95 params: serde_json::from_value(params)?,
96 }),
97 NotificationType::ClientOnNameChanged => Ok(Notification::ClientOnNameChanged {
98 params: serde_json::from_value(params)?,
99 }),
100
101 NotificationType::GroupOnMute => Ok(Notification::GroupOnMute {
103 params: serde_json::from_value(params)?,
104 }),
105 NotificationType::GroupOnStreamChanged => Ok(Notification::GroupOnStreamChanged {
106 params: serde_json::from_value(params)?,
107 }),
108 NotificationType::GroupOnNameChanged => Ok(Notification::GroupOnNameChanged {
109 params: serde_json::from_value(params)?,
110 }),
111
112 NotificationType::ServerOnUpdate => Ok(Notification::ServerOnUpdate {
114 params: serde_json::from_value(params)?,
115 }),
116
117 NotificationType::StreamOnUpdate => Ok(Notification::StreamOnUpdate {
119 params: serde_json::from_value(params)?,
120 }),
121 NotificationType::StreamOnProperties => Ok(Notification::StreamOnProperties {
122 params: serde_json::from_value(params)?,
123 }),
124 }
125 }
126}