cses-rs 0.2.0

A CSES spec impl in Rust
Documentation
use cses_rs::v1::{Class, CsesConfig, Schedule, Subject, Time, WeekType, Weekday};

fn simple_config() -> CsesConfig {
    CsesConfig {
        version: 1,
        subjects: vec![
            Subject {
                name: "Math".to_string(),
                simplified_name: Some("M".to_string()),
                teacher: Some("Mr. A".to_string()),
                room: Some("101".to_string()),
            },
            Subject {
                name: "English".to_string(),
                simplified_name: Some("E".to_string()),
                teacher: Some("Mr. B".to_string()),
                room: Some("102".to_string()),
            },
            Subject {
                name: "Physics".to_string(),
                simplified_name: Some("P".to_string()),
                teacher: Some("Mr. C".to_string()),
                room: Some("103".to_string()),
            },
            Subject {
                name: "Chemistry".to_string(),
                simplified_name: Some("C".to_string()),
                teacher: Some("Mr. D".to_string()),
                room: Some("104".to_string()),
            },
        ],
        schedules: vec![
            Schedule {
                name: "Monday".to_string(),
                enable_day: Weekday::Monday,
                weeks: WeekType::All,
                classes: vec![
                    Class {
                        subject: "Math".to_string(),
                        start_time: Time::new(8, 0, 0),
                        end_time: Time::new(9, 0, 0),
                    },
                    Class {
                        subject: "English".to_string(),
                        start_time: Time::new(9, 0, 0),
                        end_time: Time::new(10, 0, 0),
                    },
                ],
            },
            Schedule {
                name: "Tuesday-Odd".to_string(),
                enable_day: Weekday::Tuesday,
                weeks: WeekType::Odd,
                classes: vec![
                    Class {
                        subject: "Physics".to_string(),
                        start_time: Time::new(8, 0, 0),
                        end_time: Time::new(9, 0, 0),
                    },
                    Class {
                        subject: "English".to_string(),
                        start_time: Time::new(9, 0, 0),
                        end_time: Time::new(10, 0, 0),
                    },
                ],
            },
            Schedule {
                name: "Tuesday-Even".to_string(),
                enable_day: Weekday::Tuesday,
                weeks: WeekType::Even,
                classes: vec![
                    Class {
                        subject: "Chemistry".to_string(),
                        start_time: Time::new(8, 0, 0),
                        end_time: Time::new(9, 0, 0),
                    },
                    Class {
                        subject: "English".to_string(),
                        start_time: Time::new(9, 0, 0),
                        end_time: Time::new(10, 0, 0),
                    },
                ],
            },
        ],
    }
}

#[test]
fn test_serde_deserde_yaml() {
    let txt = include_str!("numberic.yaml");
    let import_data: CsesConfig = serde_yaml::from_str(txt).unwrap();
    let rs = simple_config();
    assert_eq!(import_data, rs);
    let export_data = serde_yaml::to_string(&rs).unwrap();
    assert_eq!(txt, export_data);
}