diff --git a/Cargo.toml b/Cargo.toml index c971113..7d5a8f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,5 @@ license = "GPL-3.0-or-later" [dependencies] clap = { version = "4.0.18", features = ["derive"] } rodio = "0.16.0" +serde = { version = "1.0.147", features = ["derive"] } +serde-xml-rs = "0.6.0" diff --git a/src/main.rs b/src/main.rs index dd02db1..d41b293 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,8 @@ use clap::Parser; +#[allow(dead_code)] +mod xml; + fn play_file(file: &str) { use rodio::{Decoder, OutputStream, source::Source}; diff --git a/src/xml.rs b/src/xml.rs new file mode 100644 index 0000000..7560710 --- /dev/null +++ b/src/xml.rs @@ -0,0 +1,63 @@ +use serde::Deserialize; + +// https://github.com/UoC-Radio/audio-scheduler/blob/45275818423220de90b4ae578b57acdc138e5f50/config_schema.xsd +// TODO: Extensively check constraints such as `minOccurs` and `use="required". + +#[derive(Deserialize)] +struct Fader { + fade_in_duration_secs: i8, + fade_out_duration_secs: i8, + min_level: f32, + max_level: f32, +} + +#[derive(Deserialize)] +struct Playlist { + path: String, + shuffle: bool, + fader: Fader, +} + +#[derive(Deserialize)] +struct IntermediatePlaylist { + path: String, + shuffle: bool, + fader: Fader, + sched_interval_mins: u16, + num_sched_items: u32, +} + +#[derive(Deserialize)] +enum ZoneContent { + Main(Playlist), + Fallback(Playlist), + Intermediate(IntermediatePlaylist), + Maintainer(String), + Description(String), + Comment(String), +} + + +#[derive(Deserialize)] +struct Zone { + name: String, + // TODO: Use a time struct + start: String, + zone_content: ZoneContent, +} + +#[derive(Deserialize)] +struct Day { + zones: Vec, +} + +#[derive(Deserialize)] +struct WeekSchedule { + mon: Day, + tue: Day, + wed: Day, + thu: Day, + fri: Day, + sat: Day, + sun: Day, +}