libellule 0.1.3

Unofficial implementation of the PRONOTE protocol
Documentation
use std::collections::HashMap;

use serde::Serialize;
use time::{Date, Duration, Time};

use crate::model::Tab;
use crate::protocol;

#[derive(Debug)]
pub struct Parameters {
    pub instance: Instance,
    pub user: User,
    pub tabs: TabsParameters,
}

impl Parameters {
    pub fn place_to_time(&self, place: u32) -> Time {
        self.instance.start_time + self.instance.place_duration * place
    }
}

#[derive(Debug)]
pub struct Instance {
    pub version: String,
    pub label: String,
    pub first_monday: Date,
    pub first_day: Date,
    pub last_day: Date,
    pub places_per_day: u32,
    pub places_per_hour: u32,
    pub place_duration: Duration,
    pub start_time: Time,
    pub end_time: Time,
    pub periods: Vec<Period>,
}

#[derive(Debug)]
pub struct User {
    pub id: String,
    pub fullname: String,
    pub kind: u32,
}

#[derive(Debug)]
pub struct TabsParameters {
    pub periods: HashMap<Tab, TabPeriods>,
}

#[derive(Debug, Clone)]
pub struct TabPeriods {
    pub periods: Vec<Period>,
    pub default: String,
}

#[derive(Debug, Clone, Serialize)]
#[serde(into = "protocol::Period")]
pub struct Period {
    pub id: String,
    pub name: String,
}