feat: New V3 version
This commit is contained in:
127
src/models.rs
Normal file
127
src/models.rs
Normal 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>>,
|
||||
}
|
||||
Reference in New Issue
Block a user