mc_exam_randomizer/shuffler/
exam.rs1use serde::{Deserialize, Serialize};
2
3use crate::{errors::ExamReaderError, examreader, shuffler::Question};
4
5use super::ExamSetting;
6
7#[derive(Debug, Serialize, Deserialize)]
8pub struct Exam {
9 pub name: String,
10 pub preamble: Option<String>,
11 pub questions: Option<Vec<Question>>,
12 pub ordering: Option<Vec<u32>>,
13}
14
15impl Exam {
16 pub fn new(name: &str) -> Self {
17 Exam {
18 name: String::from(name),
19 preamble: None,
20 questions: None,
21 ordering: None,
22 }
23 }
24 pub fn from_tex(
25 filename: &str,
26 name: &str,
27 ) -> Result<(Exam, Option<ExamSetting>), ExamReaderError> {
28 let (preamble, questions, es) = examreader::from_tex(filename)?;
29 Ok((
30 Exam {
31 name: name.to_string(),
32 questions: Some(questions),
33 preamble,
34 ordering: None,
35 },
36 es,
37 ))
38 }
39 pub fn from_csv(filename: &str, name: &str) -> Result<Exam, ExamReaderError> {
40 let questions = examreader::from_csv(filename)?;
41 Ok(Exam {
42 name: name.to_string(),
43 questions: Some(questions),
44 preamble: None,
45 ordering: None,
46 })
47 }
48
49 pub fn from_txt(filename: &str, name: &str) -> Result<Exam, ExamReaderError> {
50 let questions = examreader::from_txt(filename)?;
51 Ok(Exam {
52 name: name.to_string(),
53 questions: Some(questions),
54 preamble: None,
55 ordering: None,
56 })
57 }
58}