konnektoren_core/events/
event.rs

1use 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}