Skip to main content

battler_data/abilities/
ability_flag.rs

1use serde_string_enum::{
2    DeserializeLabeledStringEnum,
3    SerializeLabeledStringEnum,
4};
5
6/// Ability flags, which categorize abilities for miscellaneous behavior (such as bans or side
7/// effects).
8#[derive(
9    Debug, Clone, PartialEq, Eq, Hash, SerializeLabeledStringEnum, DeserializeLabeledStringEnum,
10)]
11pub enum AbilityFlag {
12    /// The ability can be broken by Mold Breaker.
13    #[string = "Breakable"]
14    Breakable,
15    /// Raises the user's evasion.
16    #[string = "EvasionRaising"]
17    EvasionRaising,
18    /// Cannot be passed by Entrainment.
19    #[string = "NoEntrainment"]
20    NoEntrainment,
21    /// Cannot be overwritten by Entrainment.
22    #[string = "NoEntrainmentTarget"]
23    NoEntrainmentTarget,
24    /// Cannot be copied by Role Play.
25    #[string = "NoRolePlay"]
26    NoRolePlay,
27    /// Cannot be overwritten by Simple Beam.
28    #[string = "NoSimpleBeam"]
29    NoSimpleBeam,
30    /// Cannot be swapped by Skill Swap.
31    #[string = "NoSkillSwap"]
32    NoSkillSwap,
33    /// Cannot be copied by Trace.
34    #[string = "NoTrace"]
35    NoTrace,
36    /// Cannot activate when transformed.
37    #[string = "NoTransform"]
38    NoTransform,
39    /// Cannot be overwritten by Worry Seed.
40    #[string = "NoWorrySeed"]
41    NoWorrySeed,
42    /// The ability is permanently applied to the Mon. It cannot be changed or suppressed.
43    #[string = "Permanent"]
44    Permanent,
45}
46
47#[cfg(test)]
48mod ability_flag_test {
49    use crate::{
50        AbilityFlag,
51        test_util::{
52            test_string_deserialization,
53            test_string_serialization,
54        },
55    };
56
57    #[test]
58    fn serializes_to_string() {
59        test_string_serialization(AbilityFlag::EvasionRaising, "EvasionRaising");
60    }
61
62    #[test]
63    fn deserializes_lowercase() {
64        test_string_deserialization("evasionraising", AbilityFlag::EvasionRaising);
65    }
66}