konnektoren_core/challenges/
challenge_config.rs1use super::challenge_variant::ChallengeVariant;
2use crate::challenges::task_pattern::TaskPattern;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
6pub struct ChallengeConfig {
7 pub id: String,
8 pub name: String,
9 pub description: String,
10 pub challenge: String,
11 pub variant: Option<ChallengeVariant>,
12 pub tasks: TaskPattern,
13 pub unlock_points: usize,
14 pub position: Option<(i32, i32)>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub icon: Option<String>,
17}
18
19impl Default for ChallengeConfig {
20 fn default() -> Self {
21 ChallengeConfig {
22 id: "123".to_string(),
23 name: "Konnektoren #1".to_string(),
24 description: "Your first Konnektoren challenge!".to_string(),
25 challenge: "konnektoren".to_string(),
26 variant: None,
27 tasks: 10.into(),
28 unlock_points: 0,
29 position: Some((0, 0)),
30 icon: None,
31 }
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn default_challenge_config() {
41 let challenge_config = ChallengeConfig::default();
42 assert_eq!(challenge_config.id, "123");
43 assert_eq!(challenge_config.name, "Konnektoren #1");
44 assert_eq!(
45 challenge_config.description,
46 "Your first Konnektoren challenge!"
47 );
48 assert_eq!(challenge_config.challenge, "konnektoren");
49 assert_eq!(challenge_config.tasks, 10.into());
50 assert_eq!(challenge_config.unlock_points, 0);
51 assert_eq!(challenge_config.icon, None);
52 }
53}