dawproject_rs/api/device_mods/
limiter.rs

1#![allow(unused)]
2use super::{device::DeviceElements, device_role::DeviceRole};
3
4use {
5    super::{super::add_one_get, super::fake_rng, super::real_parameter::RealParameter},
6    fake::{Dummy, Fake, Faker},
7    serde::{Deserialize, Serialize},
8};
9
10#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
11enum LimiterParamsEnum {
12    Attack(RealParameter),
13    InputGain(RealParameter),
14    OutputGain(RealParameter),
15    Release(RealParameter),
16    Threshold(RealParameter),
17}
18
19type LimiterParams = Vec<LimiterParamsEnum>;
20
21#[derive(Debug, Deserialize, Serialize, Clone, Dummy)]
22pub struct Limiter {
23    // Extendes builtInDevice
24    #[serde(rename = "@id")]
25    #[serde(skip_serializing_if = "Option::is_none")]
26    id: Option<String>,
27    #[serde(rename = "$value", default)]
28    device_elements: DeviceElements,
29    #[serde(rename = "@deviceID")]
30    #[serde(skip_serializing_if = "Option::is_none")]
31    device_id: Option<String>,
32    #[serde(rename = "@deviceName")]
33    #[serde(skip_serializing_if = "Option::is_none")]
34    device_name: Option<String>,
35    #[serde(rename = "@deviceRole")]
36    #[serde(skip_serializing_if = "Option::is_none")]
37    device_role: Option<DeviceRole>,
38    #[serde(rename = "@deviceVendor")]
39    #[serde(skip_serializing_if = "Option::is_none")]
40    device_vendor: Option<String>,
41    #[serde(rename = "@loaded")]
42    #[serde(skip_serializing_if = "Option::is_none")]
43    loaded: Option<bool>,
44    // Extension ends
45    #[serde(rename = "$value", default)]
46    params: LimiterParams,
47}
48
49impl Limiter {
50    pub fn new_test() -> Self {
51        Self {
52            id: Some(format!("id{}", add_one_get())),
53            device_elements: vec![],
54            device_id: None,
55            device_name: None,
56            device_role: None,
57            device_vendor: None,
58            loaded: None,
59            params: vec![],
60        }
61    }
62
63    pub fn new_fake() -> Self {
64        let o: Self = Faker.fake_with_rng(&mut fake_rng());
65        o
66    }
67}
68
69#[cfg(test)]
70mod tests {
71    use {super::Limiter, quick_xml::se::to_string, std::error::Error};
72
73    #[test]
74    pub fn se_test() -> Result<(), Box<dyn Error>> {
75        let mut o = Limiter::new_fake();
76
77        match to_string(&o) {
78            Ok(o) => println!("{}", o),
79            Err(err) => return Err(err.into()),
80        }
81
82        Ok(())
83    }
84}