mc_exam_randomizer/shuffler/
setting.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
4pub struct ExamSetting {
5    pub university: String,
6    pub department: String,
7    pub term: String,
8    pub coursecode: String,
9    pub examname: String,
10    pub examdate: String,
11    pub timeallowed: String,
12    pub numberofvestions: u32,
13    pub groups: String,
14    pub code_name: Option<String>,
15    pub code_numbering: Option<String>,
16    pub examtype: Option<String>,
17}
18
19impl ExamSetting {
20    pub fn new() -> Self {
21        ExamSetting {
22            university: String::new(),
23            department: String::new(),
24            term: String::new(),
25            coursecode: String::new(),
26            examname: String::new(),
27            examdate: String::new(),
28            timeallowed: String::new(),
29            numberofvestions: 0,
30            groups: String::new(),
31            code_name: None,
32            code_numbering: None,
33            examtype: None,
34        }
35    }
36    pub fn append_from_key_value(
37        exam_setting: ExamSetting,
38        key: &str,
39        value: String,
40    ) -> ExamSetting {
41        if key == "university" {
42            ExamSetting {
43                university: value,
44                ..exam_setting
45            }
46        } else if key == "department" {
47            ExamSetting {
48                department: value,
49                ..exam_setting
50            }
51        } else if key == "term" {
52            ExamSetting {
53                term: value,
54                ..exam_setting
55            }
56        } else if key == "coursecode" {
57            ExamSetting {
58                coursecode: value,
59                ..exam_setting
60            }
61        } else if key == "examname" {
62            ExamSetting {
63                examname: value,
64                ..exam_setting
65            }
66        } else if key == "examdate" {
67            ExamSetting {
68                examdate: value,
69                ..exam_setting
70            }
71        } else if key == "timeallowed" {
72            ExamSetting {
73                timeallowed: value,
74                ..exam_setting
75            }
76        } else if key == "numberofvestions" {
77            ExamSetting {
78                numberofvestions: value.parse::<u32>().unwrap_or_default(),
79                ..exam_setting
80            }
81        } else if key == "groups" {
82            ExamSetting {
83                groups: value,
84                ..exam_setting
85            }
86        } else if key == "code_name" {
87            ExamSetting {
88                code_name: Some(value),
89                ..exam_setting
90            }
91        } else if key == "code_numbering" {
92            ExamSetting {
93                code_numbering: Some(value),
94                ..exam_setting
95            }
96        } else if key == "examtype" {
97            ExamSetting {
98                examtype: Some(value),
99                ..exam_setting
100            }
101        } else {
102            exam_setting
103        }
104    }
105}