use chrono::{DateTime, FixedOffset}; use serde::{Deserialize, Serialize}; use crate::{Room, StdType, Student, Teacher}; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Timetable { pub hours: Vec, pub days: Vec, pub classes: Vec, pub groups: Vec, pub subjects: Vec, pub rooms: Vec, pub teachers: Vec, pub cycles: Vec, pub students: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct TimetableChange { pub day: DateTime, pub hours: String, pub changetype: Changetype, pub description: String, pub time: String, pub change_subject: Option, pub type_abbrev: Option, pub type_name: Option, pub atom_type: Option, pub start: Option, pub duration: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub enum Changetype { Absence, Added, Canceled, NoChange, Removed, RoomChanged, Substitution, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub enum AtomType { Hour, Pause, TimeBlock, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct PlannedClassification { pub description: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct HomeworkInfo { pub id: String, pub text: String, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Group { pub class_id: Option, pub id: String, pub abbre: Option, pub name: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Day { pub atoms: Vec, pub day_of_week: i64, pub date: DateTime, pub day_description: String, pub day_type: DateTime, pub assistance_atoms: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Atom { pub hour_id: i64, pub group_ids: Vec, pub subject_id: Option, pub teacher_id: Option, pub room_id: Option, pub is_last_room_lesson: bool, pub cycle_ids: Vec, pub homeworks: Vec, pub homework_ids: Vec, pub change: Option, pub theme: Option, pub assistants: Vec, pub notice: Option, pub planned_clasification: Option, pub week_theme: Option, pub lesson_release: LessonRelease, pub start: Option, pub duration: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub enum LessonRelease { NoChange, Released, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Assistant { pub id: String, pub is_present: bool, pub student_id: String, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct AssistanceAtom { pub hour_id: i64, pub start: i64, pub duration: i64, pub class_id: Option, pub group_id: Option, pub subject_id: Option, pub teacher_id: Option, pub room_id: Option, pub student_id: Option, pub change: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct PlannedClasification { pub description: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Hour { pub id: i64, pub caption: String, pub begin_time: String, pub end_time: String, pub start: Option, pub duration: Option, }