sonos_api/services/zone_group_topology/
operations.rs1use crate::{define_operation_with_response, Validate};
8use paste::paste;
9
10define_operation_with_response! {
12 operation: GetZoneGroupStateOperation,
13 action: "GetZoneGroupState",
14 service: ZoneGroupTopology,
15 request: {},
16 response: GetZoneGroupStateResponse {
17 zone_group_state: String,
18 },
19 xml_mapping: {
20 zone_group_state: "ZoneGroupState",
21 },
22}
23
24impl Validate for GetZoneGroupStateOperationRequest {
26 }
28
29pub use get_zone_group_state_operation as get_zone_group_state;
31
32pub const SERVICE: crate::Service = crate::Service::ZoneGroupTopology;
34
35pub fn subscribe(
48 client: &crate::SonosClient,
49 ip: &str,
50 callback_url: &str,
51) -> crate::Result<crate::ManagedSubscription> {
52 client.subscribe(ip, SERVICE, callback_url)
53}
54
55pub fn subscribe_with_timeout(
57 client: &crate::SonosClient,
58 ip: &str,
59 callback_url: &str,
60 timeout_seconds: u32,
61) -> crate::Result<crate::ManagedSubscription> {
62 client.subscribe_with_timeout(ip, SERVICE, callback_url, timeout_seconds)
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_get_zone_group_state_operation() {
71 let op = get_zone_group_state_operation().build().unwrap();
72 assert_eq!(op.metadata().action, "GetZoneGroupState");
73 }
74
75 #[test]
76 fn test_service_constant() {
77 assert_eq!(SERVICE, crate::Service::ZoneGroupTopology);
78 }
79
80 #[test]
81 fn test_subscription_helpers() {
82 let client = crate::SonosClient::new();
83
84 let _subscribe_fn = || subscribe(&client, "192.168.1.100", "http://callback.url");
86
87 let _subscribe_timeout_fn =
88 || subscribe_with_timeout(&client, "192.168.1.100", "http://callback.url", 3600);
89 }
90}