dawproject_rs/api/timeline_mods/
warps.rs

1#![allow(unused)]
2use super::{
3    audio::Audio, clip_slot::ClipSlot, clips::Clips, lanes::Lanes, markers::Markers, notes::Notes,
4    points::Points, time_unit::TimeUnit, timeline::TimeLine, video::Video, warp::Warp,
5    UpcastTimeline,
6};
7
8use {
9    super::super::{add_one_get, fake_rng},
10    fake::{Dummy, Fake, Faker},
11    serde::{Deserialize, Serialize},
12};
13
14#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
15pub enum WarpsSequenceEnum {
16    Timeline(TimeLine),
17    Lanes(Lanes),
18    Notes(Notes),
19    Clips(Clips),
20    ClipSlot(ClipSlot),
21    Markers(Markers),
22    Warps(Warps),
23    Audio(Audio),
24    Video(Video),
25    Points(Points),
26    Warp(Warp),
27}
28
29type WarpsSequence = Vec<WarpsSequenceEnum>;
30
31#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
32pub struct Warps {
33    #[serde(rename = "@id")]
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub id: Option<String>,
36    #[serde(rename = "@name")]
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub name: Option<String>,
39    #[serde(rename = "@color")]
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub color: Option<String>,
42    #[serde(rename = "@comment")]
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub comment: Option<String>,
45    #[serde(rename = "@track")]
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub track: Option<String>,
48    #[serde(rename = "@timeUnit")]
49    #[serde(skip_serializing_if = "Option::is_none", default)]
50    pub time_unit: Option<TimeUnit>,
51    #[serde(rename = "@contentTimeUnit")]
52    #[serde(skip_serializing_if = "Option::is_none", default)]
53    pub content_time_unit: Option<TimeUnit>,
54    #[serde(rename = "$value", default)]
55    pub warps_sequence: Option<WarpsSequence>,
56}
57
58impl Warps {
59    pub fn new_test(time_unit: TimeUnit) -> Self {
60        Self {
61            id: Some(format!("id{}", add_one_get())),
62            name: None,
63            color: None,
64            comment: None,
65            track: None,
66            time_unit: None,
67            warps_sequence: Some(vec![]),
68            content_time_unit: Some(time_unit),
69        }
70    }
71
72    pub fn new_fake() -> Self {
73        let o: Self = Faker.fake_with_rng(&mut fake_rng());
74        o
75    }
76}
77
78impl UpcastTimeline for Warps {
79    fn upcast(&self) -> TimeLine {
80        TimeLine {
81            id: self.id.clone(),
82            name: self.name.clone(),
83            color: self.color.clone(),
84            comment: self.comment.clone(),
85            track: self.track.clone(),
86            time_unit: self.time_unit.clone(),
87        }
88    }
89}
90
91#[cfg(test)]
92mod tests {
93    use {super::TimeUnit, std::error::Error};
94
95    use {super::Warps, quick_xml::se::to_string};
96
97    #[test]
98    pub fn se_test() -> Result<(), Box<dyn Error>> {
99        let mut o = Warps::new_test(TimeUnit::Seconds);
100
101        match to_string(&o) {
102            Ok(o) => println!("{}", o),
103            Err(err) => return Err(err.into()),
104        }
105
106        Ok(())
107    }
108}