denki 0.2.0

CLI for controlling TP-Link smart home devices — denki (電気) means electricity in Japanese
Documentation
use serde::Serialize;

use crate::tapo_vendor::requests::SectionNames;

/// `module → section names` envelope for `getPresetConfig`:
/// `{"preset": {"name": ["preset"]}}`.
#[derive(Debug, Serialize)]
pub(crate) struct SmartCamGetPresetConfigParams {
    preset: SectionNames,
}

impl SmartCamGetPresetConfigParams {
    pub fn new() -> Self {
        Self {
            preset: SectionNames::new(&["preset"]),
        }
    }
}

#[cfg(test)]
mod tests {
    use serde_json::json;

    use crate::tapo_vendor::requests::{TapoParams, TapoRequest};

    use super::*;

    #[test]
    fn request_names_its_method() {
        // What a C220 takes inside a `multipleRequest`.
        let request = TapoRequest::SmartCamGetPresetConfig(TapoParams::new(
            SmartCamGetPresetConfigParams::new(),
        ));

        assert_eq!(
            serde_json::to_value(&request).unwrap(),
            json!({
                "method": "getPresetConfig",
                "params": { "preset": { "name": ["preset"] } },
            })
        );
    }
}