use alloc::string::String;
use serde::{
Deserialize,
Serialize,
};
use serde_string_enum::{
DeserializeLabeledStringEnum,
SerializeLabeledStringEnum,
};
#[derive(Debug, Clone, PartialEq, Eq, SerializeLabeledStringEnum, DeserializeLabeledStringEnum)]
pub enum ConditionType {
#[string = "Built-in"]
#[alias = "BuiltIn"]
BuiltIn,
#[string = "Condition"]
Condition,
#[string = "Weather"]
Weather,
#[string = "Status"]
Status,
#[string = "Type"]
Type,
#[string = "Volatile"]
Volatile,
#[string = "ZPower"]
#[alias = "Z-Power"]
ZPower,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConditionData {
pub name: String,
pub condition_type: ConditionType,
#[serde(default)]
pub no_copy: bool,
#[serde(default)]
pub condition: serde_json::Value,
}
#[cfg(test)]
mod condition_test {
use crate::{
conditions::ConditionType,
test_util::{
test_string_deserialization,
test_string_serialization,
},
};
#[test]
fn serializes_to_string() {
test_string_serialization(ConditionType::BuiltIn, "Built-in");
test_string_serialization(ConditionType::Condition, "Condition");
test_string_serialization(ConditionType::Weather, "Weather");
test_string_serialization(ConditionType::Status, "Status");
}
#[test]
fn deserializes_lowercase() {
test_string_deserialization("built-in", ConditionType::BuiltIn);
test_string_deserialization("builtin", ConditionType::BuiltIn);
test_string_deserialization("condition", ConditionType::Condition);
test_string_deserialization("weather", ConditionType::Weather);
test_string_deserialization("status", ConditionType::Status);
}
}