dawproject_rs/api/
channel.rs

1#![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>), //
44    Sends(Option<Vec<Send>>),
45}
46
47#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
48pub struct Devices {
49    // this is weird
50    #[serde(rename = "$value")]
51    pub choice: Vec<DeviceTypes>,
52}
53
54#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
55pub struct Channel {
56    // Extends lane
57    #[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}