konnektoren_core/events/
event.rs1use super::ChallengeEvent;
2use super::EventType;
3use super::GameEvent;
4use serde::{Deserialize, Serialize};
5
6pub trait EventTrait {
7 fn get_type(&self) -> EventType;
8 fn get_action(&self) -> &str;
9}
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12pub enum Event {
13 Game(GameEvent),
14 Challenge(ChallengeEvent),
15}
16
17impl Default for Event {
18 fn default() -> Self {
19 Event::Game(GameEvent::default())
20 }
21}
22
23impl EventTrait for Event {
24 fn get_type(&self) -> EventType {
25 match self {
26 Event::Game(_) => EventType::Game,
27 Event::Challenge(_) => EventType::Challenge,
28 }
29 }
30
31 fn get_action(&self) -> &str {
32 match self {
33 Event::Game(event) => event.get_action(),
34 Event::Challenge(event) => event.get_action(),
35 }
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 use crate::events::{ChallengeEvent, EventType, GameEvent};
43
44 #[test]
45 fn test_default_event() {
46 let event = Event::default();
47 assert_eq!(event, Event::Game(GameEvent::Started));
48 }
49
50 #[test]
51 fn test_get_type_game() {
52 let event = Event::Game(GameEvent::Started);
53 assert_eq!(event.get_type(), EventType::Game);
54 }
55
56 #[test]
57 fn test_get_type_challenge() {
58 let event = Event::Challenge(ChallengeEvent::Started);
59 assert_eq!(event.get_type(), EventType::Challenge);
60 }
61
62 #[test]
63 fn test_get_action_game() {
64 let event = Event::Game(GameEvent::Started);
65 assert_eq!(event.get_action(), "Started");
66 }
67
68 #[test]
69 fn test_get_action_challenge() {
70 let event = Event::Challenge(ChallengeEvent::SolvedCorrect(2));
71 assert_eq!(event.get_action(), "SolvedCorrect");
72 }
73
74 #[test]
75 fn test_serde_serialization_game() {
76 let event = Event::Game(GameEvent::Started);
77 let serialized = serde_json::to_string(&event).unwrap();
78 let deserialized: Event = serde_json::from_str(&serialized).unwrap();
79 assert_eq!(deserialized, event);
80 }
81
82 #[test]
83 fn test_serde_serialization_challenge() {
84 let event = Event::Challenge(ChallengeEvent::SolvedIncorrect(1));
85 let serialized = serde_json::to_string(&event).unwrap();
86 let deserialized: Event = serde_json::from_str(&serialized).unwrap();
87 assert_eq!(deserialized, event);
88 }
89}