battler_data/conditions/
condition_data.rs1use alloc::string::String;
2
3use serde::{
4 Deserialize,
5 Serialize,
6};
7use serde_string_enum::{
8 DeserializeLabeledStringEnum,
9 SerializeLabeledStringEnum,
10};
11
12#[derive(Debug, Clone, PartialEq, Eq, SerializeLabeledStringEnum, DeserializeLabeledStringEnum)]
14pub enum ConditionType {
15 #[string = "Built-in"]
17 #[alias = "BuiltIn"]
18 BuiltIn,
19 #[string = "Condition"]
21 Condition,
22 #[string = "Weather"]
24 Weather,
25 #[string = "Status"]
27 Status,
28 #[string = "Type"]
31 Type,
32 #[string = "Volatile"]
34 Volatile,
35 #[string = "ZPower"]
37 #[alias = "Z-Power"]
38 ZPower,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct ConditionData {
46 pub name: String,
48 pub condition_type: ConditionType,
50 #[serde(default)]
54 pub no_copy: bool,
55
56 #[serde(default)]
58 pub condition: serde_json::Value,
59}
60
61#[cfg(test)]
62mod condition_test {
63 use crate::{
64 conditions::ConditionType,
65 test_util::{
66 test_string_deserialization,
67 test_string_serialization,
68 },
69 };
70
71 #[test]
72 fn serializes_to_string() {
73 test_string_serialization(ConditionType::BuiltIn, "Built-in");
74 test_string_serialization(ConditionType::Condition, "Condition");
75 test_string_serialization(ConditionType::Weather, "Weather");
76 test_string_serialization(ConditionType::Status, "Status");
77 }
78
79 #[test]
80 fn deserializes_lowercase() {
81 test_string_deserialization("built-in", ConditionType::BuiltIn);
82 test_string_deserialization("builtin", ConditionType::BuiltIn);
83 test_string_deserialization("condition", ConditionType::Condition);
84 test_string_deserialization("weather", ConditionType::Weather);
85 test_string_deserialization("status", ConditionType::Status);
86 }
87}