//! The Lock plugin allows requesting a device to lock or unlock.
use serde::{Deserialize, Serialize};

/// This packet is a lock status update.
///
/// <https://invent.kde.org/network/kdeconnect-meta/blob/master/protocol.md#kdeconnectlock>
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct LockPacket {
    /// Indicates the current locked status of the device. If true the device is locked and false if unlocked.
    pub is_locked: bool,
}

/// This packet is a request for a lock status update or change.
///
/// <https://invent.kde.org/network/kdeconnect-meta/blob/master/protocol.md#kdeconnectlockrequest>
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct LockRequestPacket {
    /// A request to change the locked status. If true the device will be locked or if false unlocked.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub set_locked: Option<bool>,

    /// Indicates this is a request for the current locked status. Always true, if present.
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub request_locked: Option<bool>,
}
