konnektoren_core/game/
game_path.rs1use crate::challenges::challenge_config::ChallengeConfig;
2use crate::game::Map;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
6pub struct GamePath {
7 pub id: String,
8 pub name: String,
9 pub challenges: Vec<ChallengeConfig>,
10 pub map: Option<Map>,
11}
12
13impl Default for GamePath {
14 fn default() -> Self {
15 let data = include_str!("../../assets/konnektoren_path.yml");
16 serde_yaml::from_str(data).unwrap()
17 }
18}
19
20impl GamePath {
21 pub fn get_challenge_config(&self, challenge_config_id: &str) -> Option<&ChallengeConfig> {
22 self.challenges
23 .iter()
24 .find(|challenge| challenge.id == challenge_config_id)
25 }
26
27 pub fn challenge_ids(&self) -> Vec<String> {
28 self.challenges
29 .iter()
30 .map(|challenge| challenge.id.clone())
31 .collect()
32 }
33
34 pub fn next_challenge_id(&self, challenge_id: &str) -> Option<String> {
35 let mut iter = self.challenges.iter();
36 while let Some(challenge) = iter.next() {
37 if challenge.id == challenge_id {
38 return iter.next().map(|c| c.id.clone());
39 }
40 }
41 None
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48
49 #[test]
50 fn default_game_path() {
51 let game_path = GamePath::default();
52 assert_eq!(game_path.name, "Konnektoren");
53 assert!(!game_path.challenges.is_empty());
54 }
55
56 #[test]
57 fn get_challenge_config() {
58 let game_path = GamePath::default();
59 let challenge_config = game_path.get_challenge_config("unknown");
60 assert!(challenge_config.is_none());
61 let challenge_config = game_path.get_challenge_config("konnektoren-1");
62 assert!(challenge_config.is_some());
63 }
64
65 #[test]
66 fn test_challenge_ids() {
67 let game_path = GamePath::default();
68 let challenge_ids = game_path.challenge_ids();
69 assert_eq!(challenge_ids.len(), game_path.challenges.len());
70 }
71
72 #[test]
73 fn test_next_challenge_id() {
74 let game_path = GamePath::default();
75 let next_challenge_id = game_path.next_challenge_id("konnektoren-1");
76 assert_eq!(next_challenge_id, Some("konnektoren-2".to_string()));
77 }
78}