dawproject_rs/api/timeline_mods/
audio.rs

1#![allow(unused)]
2
3use super::{time_unit::TimeUnit, timeline::TimeLine, UpcastTimeline};
4
5use {
6    super::{super::add_one_get, super::fake_rng, super::file_reference::FileReference},
7    fake::{Dummy, Fake, Faker},
8    serde::{Deserialize, Serialize},
9};
10
11#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
12
13pub struct Audio {
14    #[serde(rename = "@id")]
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub id: Option<String>,
17    #[serde(rename = "@name")]
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub name: Option<String>,
20    #[serde(rename = "@color")]
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub color: Option<String>,
23    #[serde(rename = "@comment")]
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub comment: Option<String>,
26    #[serde(rename = "@track")]
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub track: Option<String>,
29    #[serde(rename = "@timeUnit")]
30    #[serde(skip_serializing_if = "Option::is_none", default)]
31    pub time_unit: Option<TimeUnit>,
32    #[serde(rename = "File")]
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub files_sequence: Option<Vec<FileReference>>,
35    #[serde(rename = "@duration")]
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub duration: Option<f64>,
38
39    #[serde(rename = "@algorithm")]
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub algorithm: Option<String>,
42    #[serde(rename = "@channels")]
43    pub channels: i32,
44    #[serde(rename = "@sampleRate")]
45    pub sample_rate: i32,
46}
47
48impl Audio {
49    pub fn new_test(relative_path: String, sample_rate: i32, channels: i32, duration: f64) -> Self {
50        Self {
51            id: Some(format!("id_{}", add_one_get())),
52            name: None,
53            color: None,
54            comment: None,
55            track: None,
56            time_unit: None,
57            files_sequence: Some(vec![FileReference {
58                path: relative_path,
59                external: None,
60            }]),
61            duration: Some(duration),
62            algorithm: None,
63            channels,
64            sample_rate,
65        }
66    }
67
68    pub fn new_fake() -> Self {
69        let o: Self = Faker.fake_with_rng(&mut fake_rng());
70        o
71    }
72}
73
74impl UpcastTimeline for Audio {
75    fn upcast(&self) -> TimeLine {
76        TimeLine {
77            id: self.id.clone(),
78            name: self.name.clone(),
79            color: self.color.clone(),
80            comment: self.comment.clone(),
81            track: self.track.clone(),
82            time_unit: self.time_unit.clone(),
83        }
84    }
85}
86
87#[cfg(test)]
88mod tests {
89    use {super::Audio, quick_xml::se::to_string, std::error::Error};
90
91    #[test]
92    pub fn se_test() -> Result<(), Box<dyn Error>> {
93        let mut o = Audio::new_test("test".to_string(), 44100, 2, 1.0);
94
95        match to_string(&o) {
96            Ok(o) => println!("{}", o),
97            Err(err) => return Err(err.into()),
98        }
99
100        Ok(())
101    }
102}