use serde::Deserialize;
use crate::state::{Group, Sensor};
#[derive(Debug, Clone, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum Command {
Actuate {
target: String,
action: String,
},
AddGroup {
org: String,
group: Group,
},
RemoveGroup {
id: String,
},
AddSensor {
group: String,
sensor: Sensor,
#[serde(default, skip_serializing_if = "Option::is_none")]
binding: Option<String>,
},
RemoveSensor {
target: String,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CommandError {
Unsupported,
UnknownTarget,
InvalidAction,
UnknownSensor,
}
impl CommandError {
pub fn code(self) -> &'static str {
match self {
CommandError::Unsupported => "command.unsupported",
CommandError::UnknownTarget => "command.unknown_target",
CommandError::InvalidAction => "command.invalid_action",
CommandError::UnknownSensor => "command.unknown_sensor",
}
}
}