battler_data/mons/
evolution.rs1use alloc::string::String;
2
3use serde::{
4 Deserialize,
5 Serialize,
6};
7use serde_string_enum::{
8 DeserializeLabeledStringEnum,
9 SerializeLabeledStringEnum,
10};
11
12use crate::Gender;
13
14#[derive(Debug, Clone, PartialEq, SerializeLabeledStringEnum, DeserializeLabeledStringEnum)]
18pub enum EvolutionMethod {
19 #[string = "L"]
21 #[alias = "Level"]
22 Level,
23 #[string = "T"]
25 #[alias = "Trade"]
26 Trade,
27 #[string = "I"]
29 #[alias = "Item"]
30 Item,
31 #[string = "B"]
33 #[alias = "Battle"]
34 BattleEnd,
35 #[string = "C"]
37 #[alias = "Custom"]
38 Custom,
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct EvolutionData {
44 pub method: EvolutionMethod,
46 pub condition: String,
48 pub level: Option<u8>,
50 pub friendship: Option<bool>,
54 pub knows_move: Option<String>,
56 pub time_of_day: Option<String>,
58 pub holding_item: Option<String>,
60 pub gender: Option<Gender>,
62 pub use_item: Option<String>,
64 pub trade_for: Option<String>,
66}
67
68#[cfg(test)]
69mod evolution_method_test {
70 use crate::{
71 mons::EvolutionMethod,
72 test_util::{
73 test_string_deserialization,
74 test_string_serialization,
75 },
76 };
77
78 #[test]
79 fn serializes_to_string() {
80 test_string_serialization(EvolutionMethod::Level, "L");
81 test_string_serialization(EvolutionMethod::Trade, "T");
82 test_string_serialization(EvolutionMethod::Item, "I");
83 test_string_serialization(EvolutionMethod::BattleEnd, "B");
84 test_string_serialization(EvolutionMethod::Custom, "C");
85 }
86
87 #[test]
88 fn deserializes_full_name() {
89 test_string_deserialization("Level", EvolutionMethod::Level);
90 test_string_deserialization("Trade", EvolutionMethod::Trade);
91 test_string_deserialization("Item", EvolutionMethod::Item);
92 test_string_deserialization("Battle", EvolutionMethod::BattleEnd);
93 test_string_deserialization("Custom", EvolutionMethod::Custom);
94 }
95}