cses_rs/v1/
mod.rs

1mod time;
2
3use serde_repr::{Deserialize_repr, Serialize_repr};
4pub use time::Time;
5
6use serde::{Deserialize, Serialize};
7
8/// 课程
9#[derive(Debug, Serialize, Clone, Deserialize, PartialEq)]
10pub struct Subject {
11    pub name: String,
12    pub simplified_name: Option<String>,
13    pub teacher: Option<String>,
14    pub room: Option<String>,
15}
16
17/// 课程安排
18#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
19pub struct Class {
20    pub subject: String,
21    pub start_time: Time,
22    pub end_time: Time,
23}
24
25/// 周启用类型
26#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Copy)]
27#[serde(rename_all(serialize = "snake_case", deserialize = "snake_case"))]
28pub enum WeekType {
29    /// 所有周都启用
30    All,
31    /// 只启用单周
32    Odd,
33    /// 只启用双周
34    Even,
35}
36
37/// 星期
38#[derive(Debug, PartialEq, Clone, Copy, Serialize_repr, Deserialize_repr)]
39#[repr(u8)]
40pub enum Weekday {
41    Monday = 1,
42    Tuesday = 2,
43    Wednesday = 3,
44    Thursday = 4,
45    Friday = 5,
46    Saturday = 6,
47    Sunday = 7,
48}
49
50/// 课程安排启用集,在 weeks 和 enable_day 都匹配的时候启用
51#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
52pub struct Schedule {
53    pub name: String,
54    pub enable_day: Weekday,
55    pub weeks: WeekType,
56    pub classes: Vec<Class>,
57}
58
59/// 符合 cses 标准的配置文件数据格式
60#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
61pub struct CsesConfig {
62    pub version: u32,
63    pub subjects: Vec<Subject>,
64    pub schedules: Vec<Schedule>,
65}