dawproject_rs/api/
channel.rs1#![allow(unused)]
2#![allow(clippy::large_enum_variant)]
3
4use super::add_one_get;
5
6use {
7 super::{
8 super::api::device_mods::{
9 au_plugin::AuPlugin, builtin_device::BuiltinDevice, clap_plugin::ClapPlugin,
10 compressor::Compressor, device::Device, equalizer::Equalizer, limiter::Limiter,
11 noise_gate::NoiseGate, vst2_plugin::Vst2Plugin, vst3_plugin::Vst3Plugin,
12 },
13 bool_parameter::BoolParameter,
14 fake_rng,
15 mixer_role::MixerRoleEnum,
16 real_parameter::RealParameter,
17 send::Send,
18 unit::Unit,
19 },
20 fake::{Dummy, Fake, Faker},
21 serde::{Deserialize, Serialize},
22};
23
24#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
25pub enum DeviceTypes {
26 Device(Device),
27 Vst2Plugin(Vst2Plugin),
28 Vst3Plugin(Vst3Plugin),
29 ClapPlugin(ClapPlugin),
30 BuiltinDevice(BuiltinDevice),
31 Equalizer(Equalizer),
32 Compressor(Compressor),
33 NoiseGate(NoiseGate),
34 Limiter(Limiter),
35 AuPlugin(AuPlugin),
36}
37
38#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
39pub enum ChannelParameters {
40 Volume(Option<RealParameter>),
41 Pan(Option<RealParameter>),
42 Mute(Option<BoolParameter>),
43 Devices(Option<Devices>), Sends(Option<Vec<Send>>),
45}
46
47#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
48pub struct Devices {
49 #[serde(rename = "$value")]
51 pub choice: Vec<DeviceTypes>,
52}
53
54#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
55pub struct Channel {
56 #[serde(rename = "@id")]
58 #[serde(skip_serializing_if = "Option::is_none")]
59 id: Option<String>,
60 #[serde(rename = "@name")]
61 #[serde(skip_serializing_if = "Option::is_none")]
62 name: Option<String>,
63 #[serde(rename = "@color")]
64 #[serde(skip_serializing_if = "Option::is_none")]
65 color: Option<String>,
66 #[serde(rename = "@comment")]
67 #[serde(skip_serializing_if = "Option::is_none")]
68 comment: Option<String>,
69 #[serde(rename = "@role")]
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub role: Option<MixerRoleEnum>,
72 #[serde(rename = "@audioChannels")]
73 audio_channels: i32,
74 #[serde(rename = "@solo")]
75 #[serde(skip_serializing_if = "Option::is_none")]
76 solo: Option<bool>,
77 #[serde(rename = "@destination")]
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub destination: Option<String>,
80 #[serde(rename = "$value", default)]
81 pub elements: Option<Vec<ChannelParameters>>,
82}
83
84impl Channel {
85 pub fn new_test(volume_value: f64, pan_value: f64, role: MixerRoleEnum) -> Self {
86 let mut volume = RealParameter::new_test(Unit::Linear);
87 volume.value = Some(volume_value);
88 let mut pan = RealParameter::new_test(Unit::Normalized);
89 pan.value = Some(pan_value);
90
91 Self {
92 id: Some(format!("id_{}", add_one_get())),
93 name: None,
94 color: None,
95 comment: None,
96 role: Some(role),
97 audio_channels: 2,
98 solo: Some(false),
99 destination: None,
100 elements: Some(vec![]),
101 }
102 }
103
104 pub fn new_fake() -> Self {
105 let o: Self = Faker.fake_with_rng(&mut fake_rng());
106 o
107 }
108}
109
110#[cfg(test)]
111mod tests {
112 use std::error::Error;
113
114 use super::*;
115
116 use {
117 super::MixerRoleEnum,
118 quick_xml::{se::to_string, DeError},
119 };
120
121 #[test]
122 pub fn se_test() -> Result<(), Box<dyn Error>> {
123 let mut o = Channel::new_fake();
124
125 match to_string(&o) {
126 Ok(o) => println!("{}", o),
127 Err(err) => return Err(err.into()),
128 }
129
130 Ok(())
131 }
132}