130 lines
3.3 KiB
Rust
130 lines
3.3 KiB
Rust
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<String>,
|
|
#[serde(rename = "foregroundColor")]
|
|
pub foreground_color: Option<String>,
|
|
#[serde(rename = "willBeSpecified")]
|
|
pub will_be_specified: Option<bool>,
|
|
}
|
|
|
|
#[derive(Deserialize, Debug, uniffi::Record)]
|
|
pub struct ApiResponse {
|
|
pub status: Status,
|
|
pub schedule: HashMap<String, DailyData>,
|
|
}
|
|
|
|
#[derive(Deserialize, Clone, Debug, uniffi::Record)]
|
|
pub struct DailyData {
|
|
pub info: DayInfo,
|
|
pub changes: HashMap<String, Vec<Option<ChangeEntry>>>,
|
|
pub absence: Vec<AbsenceEntry>,
|
|
#[serde(rename = "takesPlace")]
|
|
pub takes_place: String,
|
|
#[serde(rename = "reservedRooms")]
|
|
pub reserved_rooms: Vec<String>,
|
|
}
|
|
|
|
#[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<String, DailySchedule>,
|
|
}
|
|
|
|
#[derive(uniffi::Record)]
|
|
pub struct DailySchedule {
|
|
pub info: DayInfo,
|
|
pub changes: Vec<Option<ChangeEntry>>,
|
|
pub absence: Vec<AbsenceEntry>,
|
|
pub takes_place: String,
|
|
}
|
|
|
|
#[derive(uniffi::Record)]
|
|
pub struct TeacherAbsenceResult {
|
|
pub absences: HashMap<String, Vec<AbsenceEntry>>,
|
|
}
|