dawproject_rs/api/timeline_mods/
note.rs1#![allow(unused)]
2
3use {
4 super::super::fake_rng,
5 super::lanes::ArrangementTypeChoiceEnum,
6 fake::{Dummy, Fake, Faker},
7 serde::{Deserialize, Serialize},
8};
9type NoteSequenceChoice = Vec<ArrangementTypeChoiceEnum>;
10#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
11pub struct Note {
12 #[serde(rename = "@time")]
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub time: Option<f64>,
15 #[serde(rename = "@duration")]
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub duration: Option<f64>,
18 #[serde(rename = "@channel")]
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub channel: Option<i32>,
21 #[serde(rename = "@key")]
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub key: Option<i32>,
24 #[serde(rename = "@velocity")]
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub vel: Option<f64>,
27 #[serde(rename = "@releaseVelocity")]
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub rel: Option<f64>,
30 #[serde(rename = "$value", default)]
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub notes_sequence_choice: Option<NoteSequenceChoice>,
33}
34
35impl Note {
36 pub fn new_test() -> Self {
37 Self {
38 notes_sequence_choice: None,
39 time: None,
40 duration: None,
41 channel: None,
42 key: None,
43 vel: None,
44 rel: None,
45 }
46 }
47
48 pub fn new_fake() -> Self {
49 let o: Self = Faker.fake_with_rng(&mut fake_rng());
50 o
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use {super::Note, quick_xml::se::to_string, std::error::Error};
57
58 #[test]
59 pub fn se_test() -> Result<(), Box<dyn Error>> {
60 let mut o = Note::new_fake();
61
62 match to_string(&o) {
63 Ok(o) => println!("{}", o),
64 Err(err) => return Err(err.into()),
65 }
66
67 Ok(())
68 }
69}