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