mc_exam_randomizer/shuffler/
exam.rs

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