govee_api/structs/
govee.rs

1use crate::utils::request::deserialize_bool;
2use serde::{Deserialize, Serialize};
3
4// ------------------------
5// Structs for the Govee API
6// ------------------------
7
8#[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 can be a boolean or a string
27    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}