essences/
combat_origin.rs1use crate::prelude::*;
2
3use strum_macros::{Display, EnumString};
4
5#[derive(
14 Clone,
15 Copy,
16 Debug,
17 Default,
18 Serialize,
19 Deserialize,
20 PartialEq,
21 Eq,
22 Hash,
23 JsonSchema,
24 Tsify,
25 Display,
26 EnumString,
27)]
28#[tsify(from_wasm_abi, into_wasm_abi)]
29pub enum CombatEventOrigin {
30 #[default]
33 Core,
34 Proc,
37}
38
39impl CombatEventOrigin {
40 pub fn is_core(self) -> bool {
42 matches!(self, Self::Core)
43 }
44
45 pub fn merge(self, other: Self) -> Self {
49 if self.is_core() { other } else { self }
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn only_core_is_core() {
59 assert!(CombatEventOrigin::Core.is_core());
60 assert!(!CombatEventOrigin::Proc.is_core());
61 }
62
63 #[test]
64 fn merge_only_upgrades() {
65 use CombatEventOrigin::{Core, Proc};
66 assert_eq!(Core.merge(Core), Core);
67 assert_eq!(Core.merge(Proc), Proc);
68 assert_eq!(Proc.merge(Core), Proc);
69 assert_eq!(Proc.merge(Proc), Proc);
70 }
71
72 #[test]
73 fn core_is_the_ambient_default() {
74 assert_eq!(CombatEventOrigin::default(), CombatEventOrigin::Core);
75 }
76
77 #[test]
78 fn round_trips_through_string_and_json() {
79 for origin in [CombatEventOrigin::Core, CombatEventOrigin::Proc] {
80 assert_eq!(
81 origin.to_string().parse::<CombatEventOrigin>().unwrap(),
82 origin
83 );
84 let json = serde_json::to_string(&origin).unwrap();
85 assert_eq!(
86 serde_json::from_str::<CombatEventOrigin>(&json).unwrap(),
87 origin
88 );
89 }
90 }
91}