google_smart_home/
query.rs1use serde::Deserialize;
2use serde::Serialize;
3
4pub mod request {
5 use super::*;
6
7 #[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
9 #[serde(rename_all = "camelCase")]
10 pub struct Payload {
11 pub devices: Vec<PayloadDevice>,
13 }
14
15 #[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
17 #[serde(rename_all = "camelCase")]
18 pub struct PayloadDevice {
19 pub id: String,
21
22 pub custom_data: Option<serde_json::Map<String, serde_json::Value>>,
24 }
25}
26
27pub mod response {
28 use super::*;
29
30 #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
32 #[serde(rename_all = "camelCase")]
33 pub struct Response {
34 pub request_id: String,
35 pub payload: Payload,
36 }
37
38 #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
40 #[serde(rename_all = "camelCase")]
41 pub struct Payload {
42 #[serde(skip_serializing_if = "Option::is_none")]
45 pub error_code: Option<String>,
46
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub debug_string: Option<String>,
50
51 pub devices: std::collections::HashMap<String, PayloadDevice>,
53 }
54
55 #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
57 #[serde(rename_all = "camelCase")]
58 pub struct PayloadDevice {
59 pub status: PayloadDeviceStatus,
61
62 pub error_code: Option<String>,
64
65 #[serde(default, flatten)]
67 pub state: State,
68 }
69
70 #[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
72 #[serde(rename_all = "camelCase")]
73 pub struct State {
74 pub online: bool,
76
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub on: Option<bool>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub brightness: Option<u8>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub color: Option<Color>,
88
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub active_thermostat_mode: Option<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub target_temp_reached_estimate_unix_timestamp_sec: Option<u64>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub thermostat_humidity_ambient: Option<f64>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 pub thermostat_mode: Option<String>,
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub thermostat_temperature_ambient: Option<f64>,
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub thermostat_temperature_setpoint: Option<f64>,
102 #[serde(skip_serializing_if = "Option::is_none")]
103 pub thermostat_temperature_setpoint_high: Option<f64>,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub thermostat_temperature_setpoint_low: Option<f64>,
106 }
107
108 #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
109 #[serde(rename_all = "camelCase")]
110 pub enum Color {
111 TemperatureK(u64),
112 SpectrumRgb(u32),
113 SpectrumHsv {
114 hue: f64,
115 saturation: f64,
116 value: f64,
117 },
118 }
119
120 #[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
122 #[repr(u8)]
123 #[serde(rename_all = "UPPERCASE")]
124 pub enum PayloadDeviceStatus {
125 Success,
127
128 Offline,
130
131 Exceptions,
135
136 Error,
138 }
139}