1mod time;
2
3use serde_repr::{Deserialize_repr, Serialize_repr};
4pub use time::Time;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Serialize, Clone, Deserialize, PartialEq)]
10pub struct Subject {
11 pub name: String,
12 pub simplified_name: Option<String>,
13 pub teacher: Option<String>,
14 pub room: Option<String>,
15}
16
17#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
19pub struct Class {
20 pub subject: String,
21 pub start_time: Time,
22 pub end_time: Time,
23}
24
25#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Copy)]
27#[serde(rename_all(serialize = "snake_case", deserialize = "snake_case"))]
28pub enum WeekType {
29 All,
31 Odd,
33 Even,
35}
36
37#[derive(Debug, PartialEq, Clone, Copy, Serialize_repr, Deserialize_repr)]
39#[repr(u8)]
40pub enum Weekday {
41 Monday = 1,
42 Tuesday = 2,
43 Wednesday = 3,
44 Thursday = 4,
45 Friday = 5,
46 Saturday = 6,
47 Sunday = 7,
48}
49
50#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
52pub struct Schedule {
53 pub name: String,
54 pub enable_day: Weekday,
55 pub weeks: WeekType,
56 pub classes: Vec<Class>,
57}
58
59#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
61pub struct CsesConfig {
62 pub version: u32,
63 pub subjects: Vec<Subject>,
64 pub schedules: Vec<Schedule>,
65}