use serde::Deserialize;
use serde::de::Unexpected;
use serde::de;
use serde::Deserializer;
use zigbee2mqtt_types_base_types::LastSeen;
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeEasycodetouchUv1 {
pub action: ZigbeeEasycodetouchUv1Action,
pub action_source_name: ZigbeeEasycodetouchUv1Actionsourcename,
pub action_user: f64,
pub auto_relock: bool,
pub battery: f64,
pub linkquality: f64,
pub lock_state: ZigbeeEasycodetouchUv1Lockstate,
pub sound_volume: ZigbeeEasycodetouchUv1Soundvolume,
#[serde(deserialize_with = "zigbeeeasycodetouchuv1_state_deserializer")]
pub state: bool,
pub last_seen: Option<LastSeen>,
pub elapsed: Option<u64>,
}
fn zigbeeeasycodetouchuv1_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
match String::deserialize(deserializer)?.as_ref() {
"LOCK" => Ok(true),
"UNLOCK" => Ok(false),
other => Err(de::Error::invalid_value(
Unexpected::Str(other),
&"Value expected was either LOCK or UNLOCK",
)),
}
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize)]
pub struct ZigbeeS4rxD110 {
pub current: f64,
pub device_temperature: f64,
pub energy: f64,
pub linkquality: f64,
pub power: f64,
#[serde(deserialize_with = "zigbees4rxd110_state_deserializer")]
pub state: bool,
pub voltage: f64,
pub last_seen: Option<LastSeen>,
pub elapsed: Option<u64>,
}
fn zigbees4rxd110_state_deserializer<'de, D>(deserializer: D) -> Result<bool, D::Error>
where
D: Deserializer<'de>,
{
match String::deserialize(deserializer)?.as_ref() {
"ON" => Ok(true),
"OFF" => Ok(false),
other => Err(de::Error::invalid_value(
Unexpected::Str(other),
&"Value expected was either ON or OFF",
)),
}
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize, PartialEq)]
pub enum ZigbeeEasycodetouchUv1Action {
#[serde(rename = "fingerprint_lock")]
FingerprintLock,
#[serde(rename = "fingerprint_unlock")]
FingerprintUnlock,
#[serde(rename = "key_lock")]
KeyLock,
#[serde(rename = "key_unlock")]
KeyUnlock,
#[serde(rename = "keypad_lock")]
KeypadLock,
#[serde(rename = "keypad_unlock")]
KeypadUnlock,
#[serde(rename = "lock")]
Lock,
#[serde(rename = "manual_lock")]
ManualLock,
#[serde(rename = "manual_unlock")]
ManualUnlock,
#[serde(rename = "rfid_lock")]
RfidLock,
#[serde(rename = "rfid_unlock")]
RfidUnlock,
#[serde(rename = "zigbee_unlock")]
ZigbeeUnlock,
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize, PartialEq)]
pub enum ZigbeeEasycodetouchUv1Actionsourcename {
#[serde(rename = "keypad")]
Keypad,
#[serde(rename = "manual")]
Manual,
#[serde(rename = "rf")]
Rf,
#[serde(rename = "rfid")]
Rfid,
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize, PartialEq)]
pub enum ZigbeeEasycodetouchUv1Lockstate {
#[serde(rename = "locked")]
Locked,
#[serde(rename = "not_fully_locked")]
NotFullyLocked,
#[serde(rename = "unlocked")]
Unlocked,
}
#[cfg_attr(feature = "debug", derive(Debug))]
#[cfg_attr(feature = "clone", derive(Clone))]
#[derive(Deserialize, PartialEq)]
pub enum ZigbeeEasycodetouchUv1Soundvolume {
#[serde(rename = "high_volume")]
HighVolume,
#[serde(rename = "low_volume")]
LowVolume,
#[serde(rename = "silent_mode")]
SilentMode,
}
#[cfg(all(feature = "last_seen_epoch", feature = "last_seen_iso_8601"))]
compile_error!{"Feature last_seen epoch and iso_8601 are mutually exclusive and cannot be enabled together.
This was done because it is a global setting in zigbee2mqtt and therefor can't see a reason both would be enabled.
If you have a any reason to have both ways enabled please submit an issue to https://gitlab.com/seam345/zigbee2mqtt-types/-/issues"}