Capitalize + Type in models

This commit is contained in:
Mylloon 2023-09-28 22:09:43 +02:00
parent 75832958d8
commit 384dd9eaa9
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 29 additions and 10 deletions

View file

@ -6,6 +6,7 @@ use std::collections::HashMap;
use crate::utils::{
self, get_semester, get_webpage, get_year,
models::{Position, TabChar},
Capitalize,
};
pub mod models;
@ -67,7 +68,8 @@ pub async fn timetable(
let day = matches
.name("day")
.unwrap()
.as_str();
.as_str()
.capitalize();
let startime = matches
.name("startime")
@ -122,13 +124,6 @@ pub async fn timetable(
(schedules, (semester as usize, timetable))
}
// Data builded in the timetable webpage
type T = (
// Schedules
Vec<String>,
// Timetable per days with the semester as the key
(usize, Vec<models::Day>),
);
// Data builded in the info webpage
type D = HashMap<
// Semester
@ -138,7 +133,7 @@ type D = HashMap<
>;
/// Build the timetable
pub fn build(timetable: T, dates: D) -> Vec<models::Course> {
pub fn build(timetable: models::Timetable, dates: D) -> Vec<models::Course> {
let mut schedules = Vec::new();
// h1 => heure de début | m1 => minute de début
// h2 => heure de fin | m2 => minute de fin

View file

@ -37,10 +37,18 @@ pub struct Course {
pub dtend: Option<chrono::DateTime<chrono::Utc>>,
}
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct Day {
/// Day's name
pub name: String,
/// Ordered list of all the courses of the day
pub courses: Vec<Option<Course>>,
}
// Data builded in the timetable webpage
pub type Timetable = (
// Schedules
Vec<String>,
// Timetable per days with the semester as the key
(usize, Vec<Day>),
);

View file

@ -163,3 +163,19 @@ pub fn get_year(year: Option<i32>, semester: i8) -> String {
format!("{}-{}", wanted_year - 1, wanted_year)
}
}
pub trait Capitalize {
/// Capitalize string
fn capitalize(&self) -> String;
}
impl Capitalize for str {
fn capitalize(&self) -> String {
let mut string = self.to_owned();
if let Some(r) = string.get_mut(0..1) {
r.make_ascii_uppercase();
}
string
}
}