dawproject_rs/api/timeline_mods/
video.rs

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