dawproject_rs/api/timeline_mods/
audio.rs1#![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}