use serde::Deserialize; use std::collections::HashMap; #[derive(Debug, thiserror::Error, uniffi::Error)] pub enum SuplError { #[error("Network error: {reason}")] NetworkError { reason: String }, #[error("Parse error: {reason}")] ParseError { reason: String }, #[error("Invalid date format: {reason}")] DateFormatError { reason: String }, #[error("Internal runtime error: {reason}")] RuntimeError { reason: String }, } #[derive(Deserialize, Debug, uniffi::Enum, Clone)] #[serde(tag = "type")] pub enum AbsenceEntry { #[serde(rename = "wholeDay")] WholeDay { teacher: String, #[serde(rename = "teacherCode")] teacher_code: String, }, #[serde(rename = "single")] Single { teacher: String, #[serde(rename = "teacherCode")] teacher_code: String, hours: u16, }, #[serde(rename = "range")] Range { teacher: String, #[serde(rename = "teacherCode")] teacher_code: String, hours: AbsenceRange, }, #[serde(rename = "exkurze")] Exkurze { teacher: String, #[serde(rename = "teacherCode")] teacher_code: String, }, #[serde(rename = "zastoupen")] Zastoupen { teacher: String, #[serde(rename = "teacherCode")] teacher_code: String, zastupuje: SubstituteInfo, }, #[serde(rename = "invalid")] Invalid { original: String }, } #[derive(Deserialize, Debug, uniffi::Record, Clone)] pub struct AbsenceRange { pub from: u16, pub to: u16, } #[derive(Deserialize, Debug, uniffi::Record, Clone)] pub struct SubstituteInfo { pub teacher: String, #[serde(rename = "teacherCode")] pub teacher_code: String, } #[derive(Deserialize, Debug, uniffi::Record, Clone)] pub struct ChangeEntry { pub text: String, #[serde(rename = "backgroundColor")] pub background_color: Option, #[serde(rename = "foregroundColor")] pub foreground_color: Option, #[serde(rename = "willBeSpecified")] pub will_be_specified: Option, } #[derive(Deserialize, Debug, uniffi::Record)] pub struct ApiResponse { pub status: Status, pub schedule: HashMap, } #[derive(Deserialize, Clone, Debug, uniffi::Record)] pub struct DailyData { pub info: DayInfo, pub changes: HashMap>>, pub absence: Vec, #[serde(rename = "takesPlace")] pub takes_place: String, #[serde(rename = "reservedRooms")] pub reserved_rooms: Vec>, } #[derive(Deserialize, Debug, uniffi::Record, Clone)] pub struct DayInfo { #[serde(rename = "inWork")] pub in_work: bool, } #[derive(Debug, Deserialize, uniffi::Record, Clone)] pub struct Status { #[serde(rename = "lastUpdated")] pub last_updated: String, #[serde(rename = "currentUpdateSchedule")] pub current_update_schedule: u16, } #[derive(uniffi::Record)] pub struct SuplResult { pub status: Status, pub schedule: HashMap, } #[derive(uniffi::Record)] pub struct DailySchedule { pub info: DayInfo, pub changes: Vec>, pub absence: Vec, pub takes_place: String, } #[derive(uniffi::Record)] pub struct TeacherAbsenceResult { pub absences: HashMap>, }