dawproject_rs/api/
arrangement.rs

1#![allow(unused)]
2
3use super::{add_one_get, fake_rng};
4
5use {
6    super::timeline_mods::{lanes::Lanes, markers::Markers, points::Points},
7    fake::{Dummy, Fake, Faker},
8    serde::{Deserialize, Serialize},
9};
10
11#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
12pub enum ArrangementSequenceEnum {
13    Points(Points),
14
15    Lanes(Lanes),
16    Markers(Markers),
17    TempoAutomation(Points),
18}
19
20type ArrangementSequence = Vec<ArrangementSequenceEnum>;
21
22#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
23pub struct Arrangement {
24    #[serde(rename = "@id")]
25    #[serde(skip_serializing_if = "Option::is_none")]
26    id: Option<String>,
27    #[serde(rename = "@name")]
28    #[serde(skip_serializing_if = "Option::is_none")]
29    name: Option<String>,
30    #[serde(rename = "@color")]
31    #[serde(skip_serializing_if = "Option::is_none")]
32    color: Option<String>,
33    #[serde(rename = "@comment")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    comment: Option<String>,
36    #[serde(rename = "$value", default)]
37    pub sequence: Option<ArrangementSequence>,
38}
39
40impl Arrangement {
41    pub fn new_test() -> Self {
42        Arrangement {
43            id: Some(format!("id_{}", add_one_get())),
44            name: None,
45            color: None,
46            comment: None,
47            sequence: None,
48        }
49    }
50
51    pub fn new_fake() -> Self {
52        let o: Self = Faker.fake_with_rng(&mut fake_rng());
53        o
54    }
55}
56
57#[cfg(test)]
58mod tests {
59    use {super::Arrangement, quick_xml::se::to_string, std::error::Error};
60
61    #[test]
62    pub fn se_test() -> Result<(), Box<dyn Error>> {
63        let mut o = Arrangement::new_fake();
64
65        match to_string(&o) {
66            Ok(o) => println!("{}", o),
67            Err(err) => return Err(err.into()),
68        }
69
70        Ok(())
71    }
72}