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::EmptyObjectParams;

/// `module → section → data` envelope for `rebootDevice`:
/// `{"system": {"reboot": {}}}`.
#[derive(Debug, Serialize)]
pub(crate) struct SmartCamRebootDeviceParams {
    system: RebootSystemParams,
}

#[derive(Debug, Serialize)]
struct RebootSystemParams {
    reboot: EmptyObjectParams,
}

impl SmartCamRebootDeviceParams {
    pub fn new() -> Self {
        Self {
            system: RebootSystemParams {
                reboot: EmptyObjectParams {},
            },
        }
    }
}

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

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

    use super::*;

    #[test]
    fn request_names_its_method() {
        let request =
            TapoRequest::SmartCamRebootDevice(TapoParams::new(SmartCamRebootDeviceParams::new()));

        assert_eq!(
            serde_json::to_value(&request).unwrap(),
            json!({
                "method": "rebootDevice",
                "params": { "system": { "reboot": {} } },
            })
        );
    }
}