feat: New V3 version

This commit is contained in:
2026-02-07 13:53:54 +01:00
parent 0176945bd6
commit 8926cd7ecf
7 changed files with 300 additions and 127 deletions

127
src/models.rs Normal file
View File

@@ -0,0 +1,127 @@
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 = "willBeSpecified")]
pub will_be_specified: Option<bool>,
}
#[derive(Deserialize)]
pub struct ApiResponse {
pub status: Status,
pub schedule: HashMap<String, DailyData>,
}
#[derive(Deserialize, Clone)]
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>>,
}