use serde_repr::Deserialize_repr;
use uuid::Uuid;
#[derive(Debug, Clone, Deserialize_repr, PartialEq, Eq)]
#[repr(u8)]
pub enum UserType {
Student = 1,
Parent = 2,
Teacher = 3,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Token {
pub now: fn() -> chrono::NaiveDateTime,
pub token: String,
pub expires: chrono::NaiveDateTime,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Org {
pub id: u32,
pub name: String,
pub blogger: bool,
pub school_type: u32,
pub leisure_school: u32,
pub class: String,
pub token_login: String,
}
#[derive(Debug, Clone)]
pub struct User {
pub school_url: String,
pub client: reqwest::Client,
pub name: String,
pub pictute_url: String,
pub is_of_age: bool,
pub app_key: String,
pub token: Option<Token>,
pub user_type: UserType,
pub id: u32,
pub orgs: Vec<Org>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LoginMethods {
pub student: Vec<u8>,
pub teacher: Vec<u8>,
pub parent: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SchoolListing {
pub login_methods: LoginMethods,
pub name: String,
pub url: String,
pub url_name: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LunchMenu {
pub week: u32,
pub created_at: chrono::NaiveDateTime,
pub category: String,
pub monday: Lunch,
pub tuesday: Lunch,
pub wednesday: Lunch,
pub thursday: Lunch,
pub friday: Lunch,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Lunch {
pub date: chrono::NaiveDate,
pub food: String,
}
pub mod error {
use chrono::OutOfRange;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum RequestError {
#[error("Error when sending request: {0}")]
RequestError(reqwest::Error),
#[error("Error when reading the response: {0}")]
ReadError(reqwest::Error),
#[error("Unauthorized")]
Unauthorized,
#[error("Internal server error")]
InternalServerError,
#[error("Response returned a unexpected status code: {0}")]
UncheckedCode(reqwest::StatusCode),
}
#[derive(Error, Debug)]
pub enum SchoolListingError {
#[error("Error when sending request: {0}")]
RequestError(RequestError),
#[error("Error when reading the response: {0}")]
ParseError(serde_json::Error),
#[error("The url is invalid")]
BadUrl,
}
#[derive(Error, Debug)]
pub enum TokenError {
#[error("Error when sending request: {0}")]
RequestError(RequestError),
#[error("Error when reading the response: {0}")]
ParseError(serde_json::Error),
}
#[derive(Error, Debug)]
pub enum LoginError {
#[error("Error when sending request: {0}")]
RequestError(RequestError),
#[error("Error when reading the response: {0}")]
ParseError(serde_json::Error),
}
#[derive(Error, Debug)]
pub enum LunchMenuError {
#[error("Error when sending request: {0}")]
RequestError(RequestError),
#[error("Error when retrieving new token: {0}")]
TokenError(TokenError),
#[error("Error when reading the response: {0}")]
ParseError(LunchMenuParseError),
}
#[derive(Error, Debug)]
pub enum ScheduleError {
#[error("Error when sending request: {0}")]
RequestError(RequestError),
#[error("Error when retrieving new token: {0}")]
TokenError(TokenError),
#[error("Error when reading the response: {0}")]
ParseError(ScheduleParseError),
}
#[derive(Error, Debug)]
pub enum LunchMenuParseError {
#[error("No lunch menu available")]
NoLunchMenu,
#[error("Error when parsing json: {0}")]
SerdeError(serde_json::Error),
#[error("Error when parsing date: {0}")]
DateParseError(String, chrono::ParseError),
}
#[derive(Error, Debug)]
pub enum ScheduleParseError {
#[error("Error when parsing json: {0}")]
SerdeError(serde_json::Error),
#[error("Error when parsing date: {0}")]
DateParseError(chrono::ParseError),
#[error("Error when parsing time: {0}")]
TimeParseError(chrono::ParseError),
#[error("Error when parsing day_of_week: {0}")]
DayOfWeekError(OutOfRange),
#[error("Error when parsing uuid: {0}")]
UuidParseError(uuid::Error),
}
}