govee_api/structs/
govee.rs1use crate::utils::request::deserialize_bool;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
9pub struct ApiResponseGoveeDeviceState {
10 pub code: i16,
11 pub message: String,
12 pub data: Option<GoveeDataDeviceStatus>,
13}
14
15#[derive(Debug, Deserialize, Serialize)]
16pub struct GoveeDataDeviceStatus {
17 pub device: String,
18 pub model: String,
19 pub properties: Vec<GoveeDeviceProperty>,
20}
21
22#[derive(Debug, Deserialize, Serialize, PartialEq)]
23pub enum GoveeDeviceProperty {
24 #[serde(rename = "online")]
25 #[serde(deserialize_with = "deserialize_bool")]
26 Online(bool),
28 #[serde(rename = "powerState")]
29 PowerState(String),
30 #[serde(rename = "brightness")]
31 Brightness(i16),
32 #[serde(rename = "color")]
33 Color(Color),
34 #[serde(rename = "colorTem")]
35 ColorTem(i16),
36 #[serde(rename = "colorTemInKelvin")]
37 ColorTemInKelvin(i16),
38}
39
40#[derive(Debug, Deserialize, Serialize, PartialEq)]
41pub struct Color {
42 r: u8,
43 g: u8,
44 b: u8,
45}
46
47#[derive(Debug, Deserialize, Serialize)]
48pub struct ApiResponseGoveeDevices {
49 code: Option<i16>,
50 message: String,
51 pub data: Option<GoveeData>,
52}
53
54#[derive(Debug, Deserialize, Serialize)]
55pub struct ApiResponseGoveeAppliances {
56 code: Option<i16>,
57 message: String,
58 pub data: Option<GoveeData>,
59}
60
61#[derive(Debug, Deserialize, Serialize)]
62pub struct GoveeData {
63 pub devices: Vec<GoveeDevice>,
64}
65
66#[derive(Debug, Deserialize, Serialize)]
67#[allow(non_snake_case)]
68pub struct GoveeDevice {
69 pub device: String,
70 pub model: String,
71 pub deviceName: String,
72 pub controllable: bool,
73 pub retrievable: bool,
74 pub supportCmds: Vec<String>,
75 pub properties: Properties,
76}
77
78#[derive(Debug, Deserialize, Serialize)]
79#[allow(non_snake_case)]
80pub struct Properties {
81 pub colorTem: ColorTem,
82}
83
84#[derive(Debug, Deserialize, Serialize)]
85pub struct ColorTem {
86 pub range: ColorTemRange,
87}
88
89#[derive(Debug, Deserialize, Serialize)]
90pub struct ColorTemRange {
91 pub min: i16,
92 pub max: i16,
93}
94
95#[derive(Serialize, Clone)]
96pub struct PayloadBody {
97 pub device: String,
98 pub model: String,
99 pub cmd: GoveeCommand,
100}
101
102#[derive(Serialize, Deserialize, Clone)]
103pub struct GoveeCommand {
104 pub name: String,
105 pub value: String,
106}